import tornado.web

#放在内存 redis  文件  数据库
container={} #定义一个session类
class Session:
def __init__(self,handler):
self.handler=handler
self.random_str=None
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中加入随机字符串
#加入自定义数据
#在客户端中写入随机字符串
if not self.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() self.random_str=random_str
if not container.get(self.random_str,None):
container[self.random_str]={}
container[self.random_str][key]=value
#加入客户端
self.handler.set_cookie('py_session',self.random_str) def get_value(self,key):
#先去获取客户端的随机字符串
#从container中获取自定义数据
#random_str=self.handler.get_cookie('py_session',None)
random_str=self.random_str
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)
#在这里有个bug,当程序两次设置值时,逻辑相同,但是由于只发送了一次请求,获取了第一次的py_session
#在相同逻辑代码处理下random_str=self.handler.get_cookie('py_session')
#每次都是不正确的,都需要重新创建一个标识符
#但是后面的刷新过程中由于修改了客户区的py_session,所以可以正常进行操作,但是第一次产生的py_session的依旧存在服务端
s.set_value('is_login',True)
s.set_value('name',self.get_argument('u'))
#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("登录成功"+s.get_value('name'))
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) if __name__=="__main__":
application.listen(8080)
tornado.ioloop.IOLoop.instance().start()

最新文章

  1. 使用virtualenv搭建python3开发环境
  2. QQ屠龙转世-挖矿
  3. [SharpDevelop]程序入口
  4. [原创] 使用LP Wizard 10.5 制作 Allegro PCB封装
  5. (转)JAVA 调用Web Service的三种方法
  6. Fail2防止sshd暴力破解
  7. NOIP-质因数分解
  8. Oracle 备份表数据
  9. vi常用指令
  10. T4模版自动生成MSSQL实体类
  11. 使用axios加入进度条
  12. 深入理解java虚拟机---虚拟机工具jhat(十六)
  13. 解决Eclipse添加新server时无法选择Tomcat7的问题
  14. flume-ng-elasticsearch 索引时间命名问题(时区和时间格式)
  15. eclipse配置汇总
  16. windows下redis安装及应用
  17. Oracle获取session的trace
  18. 铁乐学Python_Day33_网络编程Socket模块1
  19. 【.Net】net 反射15分钟速成
  20. PHP实现链表

热门文章

  1. Orchard Core学习一
  2. Ajax进阶 FormData对象
  3. ESXi安装时遇到不识别的硬件的处理
  4. IntersectionObserver简介
  5. Django-website 程序案例系列-13 中间件
  6. BZOJ1559[JSOI2009]密码——AC自动机+DP+搜索
  7. 读取Properties文件以及中文乱码问题
  8. MT【60】几个不常见的函数图像
  9. MT【30】椭圆的第二定义解题
  10. Twitter数据挖掘:如何使用Python分析大数据