Tornado中的Cookie设置
Tornado中的cookie分为两种--普通cookie和安全cookie
普通cookie
1.创建cookie
原型
self.set_cookie(name, value, domain=None,expires=None, path="/", expires_days=None, **kwargs
参数解释
| 参数名 | 意义 |
|---|---|
| name | 创建cookie的名称 |
| value | 创建cookie的值 |
| domain | 提交cookie时匹配的域名 |
| path | 提交cookie时匹配的路径 |
| expires | cookie的有效期,可以是时间戳整数,时间元组,datetime类型.为UTC时间 |
| expires_days | cookie的有效期天数.优先级低于expires |
示例
class PCookieHandler(RequestHandler):
def get(self):
self.set_cookie("name", "kainhuck")
self.write("ok")
2.原理
设置cookie的原理实际上是通过设置headers中的Set-Cookie来实现的.
示例
self.set_header("Set-Cookie", "name=kainhuck; Path=/")
3.获取cookie
原型
self.get_cookie(name, default=None)
参数解释
| 参数 | 意义 |
|---|---|
| name | 要获取的cookie的名称 |
| default | 如果要获取的cookie值不存在,则返回default的值 |
示例
class GetComCookie(RequestHandler):
def get(self):
cookie = self.get_cookie("name", "NULL")
print("cookie:",cookie)
self.write("ok")
4.清除cookie
清除cookie有两中方法
法一:
self.clear_cookie(name, path="/", domain=None)
删除名为name,并同时匹配domain和path的cookie
法二:
self.clear_all_cookies(path="/", domain=None)
删除同时匹配path和domain的所有cookie
示例
class ClearPCookieHandler(RequestHandler):
def get(self, *args, **kwargs):
# 清除一个cookie
# self.clear_cookie("hello")
# 清除所有cookie
self.clear_all_cookies()
self.write("ok")
安全cookie
tornado提供了一种对cookie进行简易加密方式来防止Cookie被恶意篡改
1.设置安全cookie
设置安全cookie需要一个进行混淆加密的秘钥
生成秘钥的方法举例
import base64
import uuid
key = base64.b64encode(uuid.uuid4().bytes + uuid.uuid4().bytes)
print(key) # zadJa2GJTOu5wGL62RngnVrUxVoQ80H2u6qjAfQ4rv4=
并在tornado.web.Application里添加cookie_secret
"cookie_secret": "zadJa2GJTOu5wGL62RngnVrUxVoQ80H2u6qjAfQ4rv4="
示例
class SCookieHandler(RequestHandler):
def get(self, *args, **kwargs):
self.set_secure_cookie("laohu", "good")
self.write("ok")
安全cookie值的样子
2|1:0|10:1548248269|5:laohu|8:Z29vZA==|c611b726829b3ba268e7e01da446a9daed7262b505e29ec34fdf239cef2fcfc8
说明
- 以竖线分割, 冒号前面表示后面有几位
- 安全cookie的版本,默认使用版本2
- 默认为0
- 时间戳
- cookie名
- base64编码的cookie值
- 签名值,不带长度说明
2.获取安全cookie
原型
self.get_secure_cookie(name, value=None, max_age_days=31, min_version=None)
说明一: 如果cookie存在且验证通过,返回cookie值,否则返回None
说明二: max_age_days不同于expires_days,expires_days设置浏览器中的cookie的有效时间.而max_age_days是过滤安全cookie的时间戳
示例
class GetSCookieHandler(RequestHandler):
def get(self, *args, **kwargs):
scookie = self.get_secure_cookie("laohu")
print("scookie =", scookie)
self.write("ok")
注意
安全cookie不是完全的安全,只是增加了破解cookie的难度,请勿用cookie存储敏感数据
Tornado中的Cookie设置的更多相关文章
- tornado中的cookie
1. cookie与session的区别: Session:通过在服务器端记录用户信息从而来确认用户身份,保存在服务器上,每个用户会话都有一个对应的session Cookie:通过在客户端记录信息确 ...
- Extjs 项目中常用的小技巧,也许你用得着(4)---Extjs 中的cookie设置
1.ExtJs设置cookie两种方式 其一:设置cookie如下 saveacct=isForm.getForm().findField('itemselector').getValue(); Ex ...
- Tornado中Cookie过期问题
首先,web应用程序是使用HTTP协议进行数据传输,因为HTTP协议是无状态的,所以一旦提交数据完成后,客户端和服务器端的连接就会被关闭,再次进行数据的交换就得重新建立新的连接,那么,有个问题就是服务 ...
- 从WebBrowser中取得Cookie 和 WebClient设置cookie!
原文:从WebBrowser中取得Cookie 和 WebClient设置cookie! 从WebBrowser中取得Cookie 的代码 CookieContainer myCookieContai ...
- 【转】分享前端开发中通过js设置/获取cookie的一组方法
在前端开发中,通常都需要获取并记录用户的某些操作设置,这样可以使用户下一次访问网站时不用进行重复的调整设置同一个功能. js方法的完整代码如下: var cookie = { set:function ...
- SpringBoot项目中,cookie的设置与销毁
cookie的设置与销毁 1.设置cookie /** * 设置一个cookie * @param response HttpServletResponse * @param name cookie的 ...
- js中cookie设置、获取与清除
// 设置cookie setCookie (cname, cpwd, exdays) { var exdate = new Date()// 获取时间 exdate.setTime(exdate.g ...
- 深入tornado中的http1connection
前言 tornado中http1connection文件的作用极其重要,他实现了http1.x协议. 本模块基于gen模块和iostream模块实现异步的处理请求或者响应. 阅读本文需要一些基础的ht ...
- Javascript中关于cookie的那些事儿
Javascript-cookie 什么是cookie? 指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).简单点来说就是:浏览器缓存. cookie由什 ...
随机推荐
- 二、spring集成ibatis进行数据源事务管理拦截器环境配置
1.dataSource-applicationContext.xml文件配置理解:(spring1.2.8+ibatis1.5.3)1.1)配置数据源 DriverManagerDataSource ...
- JS 函数创建、封装、调用
一.简单函数创建.封装 第三种就是构造函数 function fun(a,b){ this.firstName=a this.lastName=b } var x=new myFun(Jhon,Dav ...
- English_Rhymes_Phonics_resource
English_Rhymes_Phonics_resource 1. 英语启蒙早有用吗?_英语启蒙 2. 26个英文字母背后的故事_英语启蒙 3. Phonics Song 4. 学Phonics前先 ...
- SystemVerilog基本语法总结(下)
2018年IC设计企业笔试题解析-(验证方向) 1.请简述:定宽数组,动态数组,关联数组,队列四种数据类型的各自特点.解析:(1)定宽数组:其宽度在声明的时候就指定了,故其宽度在编译时就确定了.(2) ...
- 第二章:windows下搭建开发环境
IDE ---- pycharm数据库 --- mysql.redis.elasticsearch开发环境 -- anaconda 第一节:pycharm的安装和简单使用...(网上一搜一大堆,所以没 ...
- IDEA spring mvc整合mybatis
准备工作 IDEA 2019.3.1 MySql 8.0.17 Tomcat 7.0.9 开始步骤 一.创建一个项目,添加Web支持 点击菜单:File->NEW->Project 选择左 ...
- TeX 常用命令记录
常用: $a_{i}^{2}$ a_{i}^{2} $\sqrt x$ $\sqrt[n] x$ \sqrt[n] x $\frac{1+2}{3+4}$ 重音符号: $\hat ...
- Typora: Markdown Reference (Typora下Markdown语法使用说明)
引言 由于一直在使用Typora,这个是我使用过的最棒的Markdown编辑器,但是总是忽略某一个功能,于是决定认真看一下其帮助文档 这里做一个简单主要功能的中文翻译(按键对应Windows下). 标 ...
- C语言常用函数
一.数学函数 调用数学函数时,要求在源文件中包下以下命令行: #include <math.h> 函数原型说明 功能 返回值 说明 int abs( int x) 求整数x的绝对值 计算结 ...
- Java8 使用LocalDate计算两个日期间隔多少年,多少月,多少天
最近项目遇到一个需要计算两个日期间隔的期限,需要计算出,整年整月整日这样符合日常习惯的说法,利用之前的Date和Calendar类会有点复杂,刚好项目使用了JDK8,那就利用起来这个新特性,上代码: ...