网站首页学无止境PYTHON

python框架Tornado之二Tornado 攻略(3) Cookie 和安全 Cookie

发布时间:2014-07-25 17:17:15编辑:songlin阅读(103)

    你可以使用 set_cookie 方法在用户的浏览中设置 cookie:
     

    1. class MainHandler(tornado.web.RequestHandler): 
    2.     def get(self): 
    3.         if not self.get_cookie("mycookie"): 
    4.             self.set_cookie("mycookie""myvalue"
    5.             self.write("Your cookie was not set yet!"
    6.         else
    7.             self.write("Your cookie was set!"

    Cookie 很容易被恶意的客户端伪造。加入你想在 cookie 中保存当前登陆用户的 id 之类的信息,你需要对 cookie 作签名以防止伪造。Tornado 通过 set_secure_cookie 和 get_secure_cookie 方法直接支持了这种功能。 要使用这些方法,你需要在创建应用时提供一个密钥,名字为 cookie_secret。 你可以把它作为一个关键词参数传入应用的设置中:
     

    1. application = tornado.web.Application([ 
    2.     (r"/", MainHandler), 
    3. ], cookie_secret="61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo="

    签名过的 cookie 中包含了编码过的 cookie 值,另外还有一个时间戳和一个 HMAC 签名。如果 cookie 已经过期或者 签名不匹配,get_secure_cookie 将返回 None,这和没有设置 cookie 时的 返回值是一样的。上面例子的安全 cookie 版本如下:
     

    1. class MainHandler(tornado.web.RequestHandler): 
    2.     def get(self): 
    3.         if not self.get_secure_cookie("mycookie"): 
    4.             self.set_secure_cookie("mycookie""myvalue"
    5.             self.write("Your cookie was not set yet!"
    6.         else
    7.             self.write("Your cookie was set!"

     

本文来源地址:http://sebug.net/paper/books/tornado/