• 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存储敏感数据

  • 相关阅读:
    Android游戏开发22:Android动画的实现J2me游戏类库用于Android开发
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第三部分,完整代码)
    使用OGR创建dxf格式矢量数据
    mysql 数据库引擎 MyISAM InnoDB 大比拼 区别
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第二部分)
    mysql 更改数据库引擎
    android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精通SQLITE (第一部分)
    android 数字键盘使用
    MySQL Innodb数据库性能实践
    eclipse : Error while performing database login with the driver null
  • 原文地址:https://www.cnblogs.com/kainhuck/p/11441496.html
Copyright © 2020-2023  润新知