个人逻辑, 可能考虑不全面, 各位看到后留言, 我修改啊
实现效果: 浏览器第一次访问提交用户名, 后台验证通过, 生成随机字符串, 和用户名组成字典, 保存到服务器, 把随机字符串设置成 cookie 发给浏览器, 同一个浏览器第二次来访问这个服务器上的其他页面时候, 获取携带的 cookie 的随机字符串判断在字典, 把用户信息前台展示否则跳到其他页面或提示浏览器 cookie 没设置
代码如下:
- #!/usr/bin/env python
- #-*- coding:utf-8 -*-
- import tornado.web
- import tornado.ioloop
- dic = {}
- class LoginHandler(tornado.Web.RequestHandler):
- # 如果前台提交的用户是对的, 生成随机字符串, 根据随机字符串构建空字典, 让随机字符串做 key, 用户信息做新字典的信息. 最后把随机字符串给 cookie 返回给浏览器
- # 如果用户不对, 提示验证不通过
- def get(self, *args, **kwargs):
- if self.get_argument('u') in ['zhangsan','lisi']:
- #根据不同的时间利用 md5 生成不同的字符串
- import hashlib
- import time
- obj = hashlib.md5()
- obj.update(bytes(str(time.time()),encoding='utf-8'))
- random_str = obj.hexdigest()
- #根据随机字符串构建空字典, 让随机字符串做 key, 用户信息做新字典的信息
- dic[random_str] = {}
- dic[random_str]['is_login'] = True
- dic[random_str]['user'] = self.get_argument('u')
- # print(dic)
- #随机字符串设置到浏览器里, 供下载浏览器访问其他页面携带
- self.set_cookie('cookie',random_str)
- else:
- # 如果用户不对提示验证不通过
- self.write('验证不通过')
- class ManagerHandler(tornado.Web.RequestHandler):
- # 获取浏览器携带的 cookie 的 value, 看携带的这个 value 即随机字符串是否在字典 dic, 要是在, 并且 is_login 的 value 是 True, 前端显示用户名, 否则跳到 login 页面
- def get(self, *args, **kwargs):
- # 获取浏览器携带的 cookie 的 value
- cc = self.get_cookie('cookie')
- #看携带的这个 value 即随机字符串是否在字典 dic, 要是在, 并且 is_login 的 value 是 True, 前端显示用户名, 否则跳到 login 页面
- print(cc)
- new_random = dic.get(cc,None)
- print(new_random)
- if not new_random:
- self.redirect('/login')
- else:
- if new_random['is_login']:
- self.write(new_random['user'])
- # else:
- # self.redirect('/login')
- setting = {
- 'cookie_secret':'eeee'
- }
- App = tornado.Web.Application([(r'/login',LoginHandler),
- (r'/manager',ManagerHandler),
- ],**setting)
- if __name__ == '__main__':
- App.listen('8000')
- tornado.ioloop.IOLoop.instance().start()
来源: http://www.bubuko.com/infodetail-2955974.html