1. 程式人生 > >python---redis實現自定義session

python---redis實現自定義session

ssm clas ges enc set hash blog dig 註意

SESSION_EXPIRE = 60
SESSION_TYPE = ‘Redis‘


pool = redis.ConnectionPool(host="localhost",port=6379) redi_conn = redis.Redis(connection_pool=pool) class BaseSession: @classmethod def get_session_handler(cls,handler): if config.SESSION_TYPE == "Memery": obj = MemerySession(handler) elif config.SESSION_TYPE
== "Mamcache": obj = MemcacheSession(handler) elif config.SESSION_TYPE == "Redis": obj = RedisSession(handler) return obj class RedisSession: session_id = "py_session" def __init__(self,handler): self.handler = handler #從客戶端獲取隨機字符串 client_random_str
= self.handler.get_cookie(MemcacheSession.session_id) #如果獲取到了字符串 if client_random_str and redi_conn.exists(client_random_str): self.random_str = client_random_str else: self.random_str = self.__genarate_random_str() redi_conn.hset(self.random_str,None,None) redi_conn.expire(self.random_str,config.SESSION_EXPIRE) expires_time
= time.time() + config.SESSION_EXPIRE handler.set_cookie(MemerySession.prex_str, self.random_str, expires=expires_time) def __setitem__(self, key, value): redi_conn.hget(self.random_str,key) redi_conn.hset(self.random_str, key,value) redi_conn.expire(self.random_str, config.SESSION_EXPIRE) def __getitem__(self, item): ret = redi_conn.hget(self.random_str,item) return ret def __delitem__(self, key): redi_conn.hdel(self.random_str,key) redi_conn.expire(self.random_str, config.SESSION_EXPIRE) def __genarate_random_str(self): obj = hashlib.md5() obj.update(bytes(str(time.time()),encoding="utf8")) random_str=obj.hexdigest() return random_str

註意:

1.redis中獲取數據類型為bytes,在進行比較,例如驗證碼比較時,需要進行類型轉換

      if str(self.session[code].lower(),encoding="utf8") != self.get_argument(code).lower():
                status[status] = False
                status[error] = "驗證碼錯誤"

或者將接受的數據轉換為bytes類型

2.存放數據如果為其他類型

需要在使用時使用eval執行,是原來字符串轉為數據類型

python---redis實現自定義session