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设置的更多相关文章

  1. tornado中的cookie

    1. cookie与session的区别: Session:通过在服务器端记录用户信息从而来确认用户身份,保存在服务器上,每个用户会话都有一个对应的session Cookie:通过在客户端记录信息确 ...

  2. Extjs 项目中常用的小技巧,也许你用得着(4)---Extjs 中的cookie设置

    1.ExtJs设置cookie两种方式 其一:设置cookie如下 saveacct=isForm.getForm().findField('itemselector').getValue(); Ex ...

  3. Tornado中Cookie过期问题

    首先,web应用程序是使用HTTP协议进行数据传输,因为HTTP协议是无状态的,所以一旦提交数据完成后,客户端和服务器端的连接就会被关闭,再次进行数据的交换就得重新建立新的连接,那么,有个问题就是服务 ...

  4. 从WebBrowser中取得Cookie 和 WebClient设置cookie!

    原文:从WebBrowser中取得Cookie 和 WebClient设置cookie! 从WebBrowser中取得Cookie 的代码 CookieContainer myCookieContai ...

  5. 【转】分享前端开发中通过js设置/获取cookie的一组方法

    在前端开发中,通常都需要获取并记录用户的某些操作设置,这样可以使用户下一次访问网站时不用进行重复的调整设置同一个功能. js方法的完整代码如下: var cookie = { set:function ...

  6. SpringBoot项目中,cookie的设置与销毁

    cookie的设置与销毁 1.设置cookie /** * 设置一个cookie * @param response HttpServletResponse * @param name cookie的 ...

  7. js中cookie设置、获取与清除

    // 设置cookie setCookie (cname, cpwd, exdays) { var exdate = new Date()// 获取时间 exdate.setTime(exdate.g ...

  8. 深入tornado中的http1connection

    前言 tornado中http1connection文件的作用极其重要,他实现了http1.x协议. 本模块基于gen模块和iostream模块实现异步的处理请求或者响应. 阅读本文需要一些基础的ht ...

  9. Javascript中关于cookie的那些事儿

    Javascript-cookie 什么是cookie? 指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).简单点来说就是:浏览器缓存. cookie由什 ...

随机推荐

  1. luogu P3358 最长k可重区间集问题

    网络流建图好难,这题居然是网络流(雾,一般分析来说,有限制的情况最大流情况可以拆点通过capacity来限制,比如只使用一次,把一个点拆成入点出点,capacity为1即可,这题是限制最大k重复,可以 ...

  2. JavaScript之bind方法实现代码分析

    我们来分析一下bind方法的实现代码,下图的bind方法的实现为MDN(开发者社区)中的代码. 由上图可得:bind方法实现了两个功能:绑定this和科里化.

  3. Lesson 7 Bats

    In what way does echo-location in bats play a utilitarian role? Not all sounds made by animals serve ...

  4. 二、Linux目录结构&常用指令

    Linux目录结构: ps -ef:任务管理器 ifconfig: 查看ip ping :  测试与目标主机的连通性,ctrl+c停止 目录指令: ll:列出当前目录下的文件信息 ls -al : 列 ...

  5. springboot2.1mysql驱动类弃用

    Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdb ...

  6. 使用vim编译.cpp文件

    一.编写代码 1.打开命令行终端,输入vim test.cpp,新建了一个文件叫做“test.cpp”:如果以前已经建立过这个文件,则是打开这个名字的文件. 2.按回车进入编辑界面,输入i进入编辑模式 ...

  7. Heap(堆)的基础知识入门

    堆 逻辑结构: 1   /        \ 1          3 /     \     /    \ 4    5   6      null 物理结构; 1.首先堆是一个完全二叉查找书(Co ...

  8. MyISAM与InnoDB 的区别

    1. 事务:InnoDB支持,MyISAM不支持,在InnoDB中每一条SQL语句都会默认封装成事务自动提交,然而这样会影响速度,因此最好把多条SQL语句放在begin和commit之间组成一个事务: ...

  9. 第3节 sqoop:4、sqoop的数据导入之导入数据到hdfs和导入数据到hive表

    注意: (1)\001 是hive当中默认使用的分隔符,这个玩意儿是一个asc 码值,键盘上面打不出来 (2)linux中一行写不下,可以末尾加上 一些空格和 “ \ ”,换行继续写余下的命令: bi ...

  10. CSS - 控制最后边框的隐藏或设置为none

    div{       width: 20%;       border-left: 1px solid $border-color;       &:nth-child(5n+1){      ...