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