jamiesun 发表于 2013-1-30 01:55:43

使用mongodb来实现web.py的session

from web.session import Storeimport timeclass MongoStore(Store):    def __init__(self, db, collection_name):      self.collection = db      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), x), [(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中使用

session = web.session.Session(app, MongoStore(db, 'sessions'))
代替
session = web.session.Session(app, web.session.DiskStore('sessions'))   

DiskStore是直接进行磁盘io操作的,性能很低,而mongodb操作相当于内存操作了。
页: [1]
查看完整版本: 使用mongodb来实现web.py的session