• redis_session_store.py


    # -*- coding: utf-8 -*-
    """
    Created on 09/11/2011
    @author: Carlo Pires <carlopires@gmail.com>
    """
    import tnetstring
    from werkzeug.contrib.sessions import SessionStore
     
    SESSION_TIMEOUT = 60*60*24*7 # 7 weeks in seconds
     
    class RedisSessionStore(SessionStore):
    """
    SessionStore that saves session to redis
    """
    def __init__(self, redis, key_template='session:%s', generate_salt=None):
     
    if not generate_salt:
    from users import get_config
    generate_salt = get_config().users_secret
     
    SessionStore.__init__(self)
    self.redis = redis
    self.key_template = key_template
    self.generate_salt = generate_salt
     
    def new(self):
    """Generate a new session."""
    return self.session_class({}, self.generate_key(self.generate_salt), True)
     
    def get_session_key(self, sid):
    if isinstance(sid, unicode):
    sid = sid.encode('utf-8')
    return self.key_template % sid
     
    def save(self, session):
    key = self.get_session_key(session.sid)
    if self.redis.set(key, tnetstring.dumps(dict(session))):
    return self.redis.expire(key, SESSION_TIMEOUT)
     
    def delete(self, session):
    key = self.get_session_key(session.sid)
    return self.redis.delete(key)
     
    def get(self, sid):
    if not self.is_valid_key(sid):
    return self.new()
    key = self.get_session_key(sid)
    saved = self.redis.get(key)
    if saved:
    data = tnetstring.loads(saved)
    return self.session_class(data, sid, False)
     
    def list(self):
    """
    Lists all sessions in the store.
    """
    session_keys = self.redis.keys(self.key_template[:-2] + '*')
    return [s[len(self.key_template)-2:] for s in session_keys]
  • 相关阅读:
    Spring sprint @ ninth day
    微软面试:找水王问题
    Spring sprint @ first day
    软件工程概论 购书最低价格问题
    网络助手的NABCD分析
    记初学net-SNMP
    求二维数组联通子数组和的最大值 (联通涂色) beta!
    二维数组环状最大子矩阵
    一维数组中的最大子数组(环状)
    图书助手冲刺第七天
  • 原文地址:https://www.cnblogs.com/chjbbs/p/3531407.html
Copyright © 2020-2023  润新知