python全棧系列之---定義一個session類
阿新 • • 發佈:2018-03-08
ret self ges its redis lib coo span imp
首先:註意cookie中的get_cookie是返回字符串,而get_secure_cookie返回的是字節類型
#self.get_secure_cookie()
#The decoded cookie value is returned as a byte string (unlike
#`get_cookie`).
md5加密獲取的十六進制也是返回的字符串類型
import hashlib import time obj = hashlib.md5() obj.update(bytes(str(time.time()), encoding="utf8"))#傳入byte類型 random_str = obj.hexdigest()#返回字符串 """ Return the digest value as a string of hexadecimal digits. """
以下是自定義的session類,以及使用:
import tornado.web #放在內存 redis 文件 數據庫 container={} #定義一個session類 class Session: def __init__(self,handler): self.handler=handler pass def __genarate_random_str(self): import hashlib import time obj = hashlib.md5() obj.update(bytes(str(time.time()), encoding="utf8"))#傳入byte類型 random_str = obj.hexdigest()#返回字符串 return random_str def set_value(self,key,value): #在container中加入隨機字符串 #加入自定義數據 #在客戶端中寫入隨機字符串 random_str=‘‘ if self.handler.get_cookie(‘py_session‘): random_str=self.handler.get_cookie(‘py_session‘) if not container.get(random_str,None): random_str = self.__genarate_random_str() else: random_str=self.__genarate_random_str() if not container.get(random_str,None): container[random_str]={} container[random_str][key]=value #加入客戶端 self.handler.set_cookie(‘py_session‘,random_str) def get_value(self,key): #先去獲取客戶端的隨機字符串 #從container中獲取自定義數據 random_str=self.handler.get_cookie(‘py_session‘,None) dict_info=container.get(random_str,None) if not dict_info: return None return dict_info[key] class IndexHandler(tornado.web.RequestHandler): def get(self): if self.get_argument(‘u‘,None) in [‘asd‘,‘zxc‘]: s = Session(self) s.set_value(‘is_login‘,True) #self.get_secure_cookie() #The decoded cookie value is returned as a byte string (unlike #`get_cookie`). else: self.write("請登錄") class ManagerHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): s=Session(self) val = s.get_value(‘is_login‘) if val: self.write("登錄成功") else: self.redirect("/index") settings ={ ‘template_path‘:‘views‘, ‘static_path‘:‘statics‘, ‘cookie_secret‘:‘dafawafawfaw‘, } application = tornado.web.Application([ (r"/index",IndexHandler), (r"/manager",ManagerHandler), ],**settings)
python全棧系列之---定義一個session類