#!/usr/bin/env python # -*- coding:utf-8 -*- import tornado.ioloop import tornado.web container = {} class Session: def __init__(self,handler): self.handler = handler # 生成随机字符串 def __random_star(self): import hashlib import time obj = hashlib.md5() obj.update(bytes(str(time.time()),encoding='utf-8')) random_str = obj.hexdigest() return random_str # 在用户浏览器上设置cookie def set_value(self,key,value): random_str = self.__random_star() container[random_str] = {} container[random_str][key] = value self.handler.set_cookie('__kakaka__',random_str) # 获取用户浏览器上的cookie def get_value(self,key): random_str = self.handler.get_cookie('__kakaka__') user_info_dict = container[random_str] val = user_info_dict[key] return val class IndexHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): # 获取用户传入的值 如果等于将执行操作 if self.get_argument('u',None)in ['alex','eric']: s = Session(self) s.set_value('is_login',True) else: self.write('请登录') class ManagerHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): # 获取用户随机字符串 判断是否是true s = Session(self) val = s.get_value('is_login') if val: self.write('CG') else: self.render('/index') settings = { 'template_path':'views', 'static_path':'statics', 'cookie_secret':'skjfsajdklfjalskj' } application = tornado.web.Application([ (r"/index",IndexHandler), (r"/manager",ManagerHandler), ],**settings) if __name__ == '__main__': application.listen(8888) tornado.ioloop.IOLoop.instance().start()
############比较完整的封装 #!/usr/bin/env python # -*- coding:utf-8 -*- import tornado.ioloop import tornado.web container = {} class Session: def __init__(self,handler): self.handler = handler self.random_str = None # 生成随机字符串 def __random_star(self): import hashlib import time obj = hashlib.md5() obj.update(bytes(str(time.time()),encoding='utf-8')) random_str = obj.hexdigest() return random_str # 在用户浏览器上设置cookie def set_value(self,key,value): if not self.random_str: # 获取用户上的cookie random_str = self.handler.get_cookie('__kakaka__') # 如果用户没有 cookie 那么就创建一份 if not random_str: random_str = self.__random_star() container[random_str] = {} # 如果有 else: # 如果 random_str 在 container.keys()里面 就pass if random_str in container.keys(): pass # 否则 就重新创建一份 else: random_str = self.__random_star() container[random_str] = {} self.random_str = random_str container[self.random_str][key] = value self.handler.set_cookie('__kakaka__',self.random_str) # 获取用户浏览器上的cookie def get_value(self,key): random_str = self.handler.get_cookie('__kakaka__') #判断random_str是否为空 if not random_str: return None # 到container里面获取下random_str 看是否存在 user_info_dict = container.get(random_str,None) if not user_info_dict: return None val = user_info_dict.get(key) return val class IndexHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): # 获取用户传入的值 如果等于将执行操作 if self.get_argument('u',None)in ['alex','eric']: s = Session(self) s.set_value('is_login',True) s.set_value('name',self.get_argument('u',None)) print(container) else: self.write('请登录') class ManagerHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): # 获取用户随机字符串 判断是否是true s = Session(self) val = s.get_value('is_login') if val: self.write(s.get_value('name')) else: self.write('失败') settings = { 'template_path':'views', 'static_path':'statics', 'cookie_secret':'skjfsajdklfjalskj' } application = tornado.web.Application([ (r"/index",IndexHandler), (r"/manager",ManagerHandler), ],**settings) if __name__ == '__main__': application.listen(8888) tornado.ioloop.IOLoop.instance().start()
session 保存在服务器端 的数据库 或者 内存 和缓存中 cookie保存在客户端,每次客户端访问都会携带cookie