#!/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