淘先锋技术网

首页 1 2 3 4 5 6 7
from web.session import Store
import time

class MongoStore(Store):
    def __init__(self, db, collection_name):
        self.collection = db[collection_name]
    
    def __contains__(self, key):
        data = self.collection.find_one({'session_id':key})
        return bool(data) 

    def __getitem__(self, key):
        now = time.time()
        s = self.collection.find_one({'session_id':key})
        if not s:
            raise KeyError
        else:
            s.update({'attime':now})
            return s

    def __setitem__(self, key, value):
        now = time.time()

        value['attime'] = now

        s = self.collection.find_one({'session_id':key})
        if s:
            value = dict(map(lambda x: (str(x[0]), x[1]), [(k,v) for (k,v) in value.iteritems() if k not in ['_id']]))
            s.update(**value)
            self.collection.save(s)
        else:
            self.collection.insert(value)
                
    def __delitem__(self, key):
        self.collection.remove({'session_id':key})

    def cleanup(self, timeout):
        timeout = timeout/(24.0*60*60) #timedelta takes numdays as arg
        last_allowed_time = time.time() - timeout
        self.collection.remove({'attime' : { '$lt' : last_allowed_time}})



在你的app中使用


代替


DiskStore是直接进行磁盘io操作的,性能很低,而mongodb操作相当于内存操作了。




已有 2 人发表留言,猛击->>这里<<-参与讨论


JavaEye推荐



web.py——session

使用web.py过程中,遇到两个疑问:1、web.py如何管理相对自动的管理session?2、session缓存的更新为何会有延迟?通过学习web.py框架中session相关源码,有了答案:1、web.py通过Session实例作为公共的session使用接...

web.py之session存储方式分析

 由于HTTP是无状态的协议,所以有了cookie,所以有了session。当用户与服务器连接时,服务器给每个用户一个session,并设定其中内容。session是建立在cookie之上的。当一个session第一次被启用时,一个唯一的标识被....

web.py 的session 没法使用吗?

web.py的session没法使用吗?来自:小罗快飞2011-12-1510:03:42问题解决了,感谢rosickey的支持app_root=os.path.dirname(__file__)app=web.application(urls,globals()).wsgifunc()db=web.database(dbn='mysql',host...