Twisted系列web编程之六 :SESSION 的处理
By:Roy.LiuLast updated:2012-11-08
前面讲到了利用twisted来动态生成网页,动态dispatch url, 处理get 请求,处理post请求的数据,但还有一个重要的东西。在做网页开发时必不可少,就是 session 管理。怎么得到session, 怎么测底销毁一个session,怎么在session 中存入数据,怎么设置 session 的过期时间。这是要解决的问题。
一, Session 的创建与销毁.
运行程序,并在浏览器地址栏输入 http://localhost:8880/getsession, 会得到session id, 如果在浏览器输入 http://localhost:8880/expire ,会销毁session
二 在 session 中保存内容,比如保存一个计数器,每次访问就加一。
运行程序之后,在浏览器上输入 http://locaohost:8880/count 会发现计数器变化,每次刷新网页,计数器将会加一.
三。设置 session 的过期时间。
运行程序,在浏览器上输入 http://localhost:8880/logme 可以发现session 销毁,另外,等5秒钟,session 也会超时销毁.
一, Session 的创建与销毁.
from twisted.internet import reactor from twisted.web.resource import Resource from twisted.web.server import Site class ShowSession(Resource): def render_GET(self, request): return 'Your session id is: ' + request.getSession().uid class ExpireSession(Resource): def render_GET(self, request): request.getSession().expire() return 'Your session has been expired.' resource = ShowSession() resource.putChild("expire", ExpireSession()) resource.putChild('getsession',ShowSession()) factory = Site(resource) reactor.listenTCP(8880, factory) reactor.run()
运行程序,并在浏览器地址栏输入 http://localhost:8880/getsession, 会得到session id, 如果在浏览器输入 http://localhost:8880/expire ,会销毁session
二 在 session 中保存内容,比如保存一个计数器,每次访问就加一。
from twisted.internet import reactor from twisted.python.components import registerAdapter from twisted.web.resource import Resource from twisted.web.server import Session, Site from zope.interface import Interface, Attribute, implements class ICounter(Interface): value = Attribute("An int value which counts up once per page view.") class Counter(object): implements(ICounter) def __init__(self, session): self.value = 0 registerAdapter(Counter, Session, ICounter) class CounterResource(Resource): def render_GET(self, request): session = request.getSession() counter = ICounter(session) counter.value += 1 return "Visit #%d for you!" % (counter.value,) resource = CounterResource() resource.putChild("count", CounterResource()) factory = Site(resource) reactor.listenTCP(8880, factory) reactor.run()
运行程序之后,在浏览器上输入 http://locaohost:8880/count 会发现计数器变化,每次刷新网页,计数器将会加一.
三。设置 session 的过期时间。
from twisted.web.server import Site, Session from twisted.web.resource import Resource from twisted.internet import reactor class ShortSession(Session): sessionTimeout = 5 class ExpirationLogger(Resource): sessions = set() def render_GET(self, request): session = request.getSession() if session.uid not in self.sessions: self.sessions.add(session.uid) session.notifyOnExpire(lambda: self._expired(session.uid)) return "" def _expired(self, uid): print "Session", uid, "has expired." self.sessions.remove(uid) rootResource = Resource() rootResource.putChild("logme", ExpirationLogger()) factory = Site(rootResource) factory.sessionFactory = ShortSession reactor.listenTCP(8880, factory) reactor.run()
运行程序,在浏览器上输入 http://localhost:8880/logme 可以发现session 销毁,另外,等5秒钟,session 也会超时销毁.
From:一号门
Previous:Twisted系列web编程之六 :处理POST数据
COMMENTS