Twisted系列web编程之六 :SESSION 的处理

摘要: 前面讲到了利用twisted来动态生成网页,动态dispatch url, 处理get 请求,处理post请求的数据,但还有一个重要的东西。在做网页开发时必不可少,就是 session 管理。怎么得到session, 怎么测底销毁一个session,怎么在session 中存入数据,怎么设置 session 的过期时间。这是要解决的问题。

前面讲到了利用twisted来动态生成网页,动态dispatch url, 处理get 请求,处理post请求的数据,但还有一个重要的东西。在做网页开发时必不可少,就是 session 管理。怎么得到session, 怎么测底销毁一个session,怎么在session 中存入数据,怎么设置 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 也会超时销毁.

上一篇: Twisted系列web编程之六 :处理POST数据
下一篇: 用js实现网页滑屏解锁,类似iphone解锁功能(附源码下载)
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号