[py]tornado诠释cookie
来源:互联网 发布:java图形界面编程代码 编辑:程序博客网 时间:2024/06/12 18:50
tornado返回一个index.html
start.py
#!/usr/bin/env python# coding=utf-8import tornado.ioloopimport tornado.webclass MainHandler(tornado.web.RequestHandler): def get(self): # self.write("Hello, world") # self.render("index.html")settings = { 'template_path': 'templates', 'static_path': 'static', 'static_url_prefix': '/statics/',}application = tornado.web.Application([ (r"/index", MainHandler),],**settings)if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()
index.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><script> function setCookie(name, value, expires) { var temp = []; var current_date = new Date(); current_date.setSeconds(current_date.getSeconds() + 5); document.cookie = name + "= " + value + ";expires=" + current_date.toUTCString(); }</script></body></html>
后端设置cookie方法:
tornado对cookie的基本操作
语法格式:
class MainHandler(tornado.web.RequestHandler): def get(self): if not self.get_cookie("mycookie"): self.set_cookie("mycookie", "myvalue") self.write("Your cookie was not set yet!") else: self.write("Your cookie was set!")
操作:
class MainHandler(tornado.web.RequestHandler): def get(self): print(self.cookies) # 打印前端发来的所有cookie. self.set_cookie("k1", "1111") # 设置一个cookie print(self.get_cookie("k1")) # 获取某个cookie self.render("index.html")
tornado操作cookie的参数
- tornado设置cookie格式:
self.set_cookie(self, name, value, domain=None, expires=None, path="/", expires_days=None, **kwargs)
- tornado设置cookie栗子:设置cookie超时时间为900s
self.set_cookie('key', 'value', expires=time.time()+900)
- 参数有这些:
通过浏览器js设置cookie:
直接通过console用命令的方式设置cookie
- 设置cookie常用操作
document.cookie = "test1=Hello";document.cookie = "test2=World";document.cookie="age=12; expires=Thu, 26 Feb 2116 11:50:25 GMT; domain=sankuai.com; path=/";
查询时属性不会显示
- 获取cookie test2的值
var myCookie = document.cookie.replace(/(?:(?:^|.*;\s*)test2\s*\=\s*([^;]*).*$)|^.*$/, "$1");alert(myCookie);
- 同时设置多个cookie
document.cookie = "name=Jonh";document.cookie = "age=12";document.cookie = "class=111";document.cookie = "name=Jonh; age=12; class=111"; 只能添加第一个
增删改查cookie参考:https://developer.mozilla.org/zh-CN/docs/Web/API/Document/cookie
使用函数法设置cookie(s为单位,时间要处理为toUTCString())
- index.html里定义cookie,前端浏览器console调用函数
function setCookie(name, value, expires) { var temp = []; var current_date = new Date(); current_date.setSeconds(current_date.getSeconds() + 5); document.cookie = name + "= " + value + ";expires=" + current_date.toUTCString(); }
- 设置一个带时间的cookie
小结: 通过jq和操作cookie
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>cookie</title> <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script src="http://apps.bdimg.com/libs/jquery.cookie/1.4.1/jquery.cookie.js"></script></head><body><script> function setCookieBySeconds(name, value, expires) { var current_date = new Date(); current_date.setDate(current_date.getSeconds()+expires); document.cookie = name + '= ' + value +';expires=' + current_date.toUTCString(); } function setCookieByDays(name, value, expires) { var current_date = new Date(); current_date.setDate(current_date.getDate()+expires); document.cookie = name + '= ' + value +';expires=' + current_date.toUTCString(); } //此外还可以导入jquery.cookie.js后通过 // $.cookie('k1','v1',{expires:7});设置过期时间为7天</script></body></html>
jq操作cookie
下载
$.cookie(’the_cookie’, ‘the_value’); //新建cookie$.cookie(’the_cookie’, null); //删除一个cookie
$.cookie('the_cookie'); //读取Cookie值$.cookie(’the_cookie’, ‘the_value’); //设置cookie的值$.cookie(’the_cookie’, ‘the_value’, {expires: 7, path: ‘/’, domain: ‘jquery.com’, secure: true});//新建一个cookie 包括有效期 路径 域名等
使用签名的cookie
tornado签名cookie使用
start.py
#!/usr/bin/env python# coding=utf-8import tornado.ioloopimport tornado.webclass MainHandler(tornado.web.RequestHandler): def get(self): if not self.get_secure_cookie("mycookie"): self.set_secure_cookie("mycookie", "myvalue") self.write("Your cookie was not set yet!") else: self.write("Your cookie was set!")settings = { 'template_path': 'templates', 'static_path': 'static', 'static_url_prefix': '/statics/',}application = tornado.web.Application([ (r"/index", MainHandler),], **settings,cookie_secret="61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=")if __name__ == "__main__": print('http://127.0.0.1:8888/') application.listen(8888) tornado.ioloop.IOLoop.instance().start()
使用带签名的cookie做的一个: 用户登陆案例
效果
完整代码:
start.pyimport tornado.webimport tornado.ioloopclass IndexHandler(tornado.web.RequestHandler): def get(self): self.set_secure_cookie('username', 'maotai') self.set_secure_cookie('password', '123456') self.render('login.html') def post(self, *args, **kwargs): username = self.get_argument('username', None) password = self.get_argument('password', None) cooike_user = str(self.get_secure_cookie('username'), encoding='utf-8') cooike_pass = str(self.get_secure_cookie('password'), encoding='utf-8') if username == cooike_user and password == cooike_pass: self.write('Hello ' + cooike_user) else: self.write('用户名或密码错误')settings = { 'template_path': 'templates',}application = tornado.web.Application([ (r'/', IndexHandler),], **settings, cookie_secret="508CE6152CB93994628D3E99934B83CC")if __name__ == '__main__': print('http://127.0.0.1:8888') application.listen(8888) tornado.ioloop.IOLoop.instance().start()
login.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>login</title></head><body><form action="/" method="post"> <input type="text" name="username"> <input type="text" name="password"> <input type="submit" value="登陆"></form></body></html>
tornado的session与cookie
在Tornado中是不提供像Cookie这种直接设置Session的,需要我们自己写插件来进行对Session的增删改
Session的数据是保存在服务端的,如果要应用Session必须要依赖Cookie,因为Cookie的值就等于Session的Key
- Session在内存中的存储方式如下:
key(随机字符串) = { {'k1','v1'}, {'k2','v2'}, {'k3','v3'}, ....}key(随机字符串) = { {'k1','v1'}, {'k2','v2'}, {'k3','v3'}, ....}key(随机字符串) = { {'k1','v1'}, {'k2','v2'}, {'k3','v3'}, ....}.....
- cookie和session关系图解
参考:http://www.cnblogs.com/xinsiwei18/p/5836381.html
一个设置与获取Session的小脚本:
代码逻辑:
完整code:
#!/usr/bin/env python# _*_ coding: utf-8 _*_import tornado.webimport tornado.ioloopcontainer = {}class Session: def __init__(self, Handler): self.Handler = Handler self.random_str = None # 生成随机字符串 def __genarate_random_str(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 __setitem__(self, key, value): if self.random_str == None: random_str = self.Handler.get_cookie('uc') if not self.random_str: random_str = self.__genarate_random_str() container[random_str] = {} else: if self.random_str in container.keys(): pass else: random_str = self.__genarate_random_str() container[random_str] = {} self.random_str = random_str container[self.random_str][key] = value # 浏览器写入Cookie self.Handler.set_cookie('uc', self.random_str) # 获取cookie def __getitem__(self, key): random_str = self.Handler.get_cookie('uc') if not random_str: return None user_info_dict = container.get(random_str, None) if not user_info_dict: return None value = user_info_dict.get(key, None) return valueclass BaseHandler(tornado.web.RequestHandler): def initialize(self): self.session = Session(self)class SetHandler(BaseHandler): def get(self, *args, **kwargs): self.session['Hello'] = 'World' self.write('OK')class GetHandler(BaseHandler): def get(self, *args, **kwargs): val = self.session['Hello'] self.write(val)application = tornado.web.Application([ (r'/set', SetHandler), (r'/get', GetHandler),])if __name__ == '__main__': print('http://127.0.0.1:8000') application.listen(8000) tornado.ioloop.IOLoop.instance().start()
2017年8月29日
阅读全文
0 0
- [py]tornado诠释cookie
- [py]tornado-jquery ajax
- tornado cookie 和cookie安全
- tornado入门 - 登陆与cookie
- tornado系列五:cookie安全
- tornado Cookie和auth认证
- python开发框架(tornado, web.py)
- [py]pyweb框架本质-tornado框架初探
- [py]tornado form表单逻辑前戏
- [py]一步一步实现tornado form验证
- py操作cookie
- [py]图解cookie&session
- tornado设置cookie过期时间(expires time)
- tornado系列:用cookie进行用户验证
- 第一个tornado程序,经典的hello.py
- 6.Tornado RequestHandler和Application类---了解web.py文件
- [py]tornado分页实现-从本质到完全实现
- web.py的 cookie和session
- 【python 爬虫】linux 下 selenium+phantomjs 自动模拟登陆
- 找三元环(bzoj 3498: PA2009 Cakes)
- 基于python3.5的scrapy框架搭建(三)
- [py]python函数式编程
- log4j2 按天分日志
- [py]tornado诠释cookie
- Android iperf 工具移植和编译
- El和标准标签
- ie8下button按钮问题
- linux安装ffmpeg扩展
- SQLServer--给数据库用户授权与角色管理
- 高效圆角
- 如何将一维数组转换为需要的二维数组
- 解决非驱动签名缺失情况下的“Windows 无法验证此设备所需的驱动程序的数字签名”问题