Python:Tornado 第二章:实战演练:开发Tornado网站:第七节:安全Cookie机制
上一篇文章:Python:Tornado 第二章:实战演练:开发Tornado网站:第六节:异步与协程化
下一篇文章:Python:Tornado 第二章:实战演练:开发Tornado网站:第八节:用户身份认证
因为Cookie总是被保存在客户端,所以如何保存其不被篡改是服务器端程序必须解决的问题。
Tornado为Cookie提供了信息加密机制,使得客户端无法随意解析和修改Cookie的键值。
下一篇文章:Python:Tornado 第二章:实战演练:开发Tornado网站:第八节:用户身份认证
Cookie是很多网站为了辨别用户的身份而存储在用户本地终端(Client Side)d的数据,在Tornado中使用RequestHandler.get_cookie()、RequestHandler.set_cookie()可以方便地对Cookie进行读写。
实例:Cookie的简单读写
import tornado.web session_id = 1 class MainHandler(tornado.web.RequestHandler): def get(self): global session_id if not self.get_cookie("session"): self.set_cookie("session",str(session_id)) session_id+=1 self.write("设置新的session") else: self.write("已经具有session") if __name__ == '__main__': app=tornado.web.Application([ ("/",MainHandler) ]) app.listen("8888") tornado.ioloop.IOLoop.current().start()
本例中用get_cookie()函数判断Cookie名【session】是否存在,如果不存在则为其赋予新的session_id.
在实际应用中,Cookie经常像本例这样用于保存session信息。因为Cookie总是被保存在客户端,所以如何保存其不被篡改是服务器端程序必须解决的问题。
Tornado为Cookie提供了信息加密机制,使得客户端无法随意解析和修改Cookie的键值。
实例:安全的Cookie
代码:
import tornado.web session_id = 1 class MainHandler(tornado.web.RequestHandler): def get(self): global session_id #get_secure_cookie代替get_cookie if not self.get_secure_cookie("session"): #set_secure_cookie代替set_cookie self.set_secure_cookie("session",str(session_id)) session_id+=1 self.write("设置新的session") else: self.write("已经具有session") if __name__ == '__main__': app=tornado.web.Application([ ("/",MainHandler) ],cookie_secret="JIA_MI_MI_YAO") app.listen("8888") tornado.ioloop.IOLoop.current().start()
对比上面的简单Cookie实例可以发现不同之处:
- 在tornado.web.Application对象初始化时赋予cookie_secret参数,该参数值时一个字符串,用于保存本网站Cookie加密时的密钥。
- 在需要读取cookie的地方使用RequestHandler.get_secure_cookie代替原来的RequestHandler.get_cookie调用。
- 在需要写入Cookie的地方用RequestHandler.set_secure_cookie替换原来的RequestHandler.set_cookie调用,
这样,就不需要担心Cookie伪造的问题了,但是cookie_secret参数值作为加密密钥,需要好好保护,不能泄露。
相关推荐
houmenghu 2020-11-17
jincheng 2020-09-01
阳光之吻 2020-08-03
hzyuhz 2020-07-04
服务器端攻城师 2020-06-26
xuanwenchao 2020-06-14
Lophole 2020-06-13
明瞳 2020-06-08
Dreamya 2020-06-03
SoarFly00 2020-06-03
咻咻ing 2020-06-01
三动 2020-05-29
老道长的测试生活 2020-05-25
时光如瑾雨微凉 2020-05-18
OwenJi 2020-05-10
SoarFly00 2020-04-19
kentrl 2020-11-10
逍遥友 2020-10-26