我无法在Tornado / Python上设置cookie
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我无法在Tornado / Python上设置cookie相关的知识,希望对你有一定的参考价值。
我有一个问题,我不明白为什么...基本上我不能在Tornado / Python上设置cookie,无论是普通cookie还是安全cookie。以下是我的代码:
class API(BaseHandler):
def get(self):
self.set_secure_cookie("a_cookie", "a_value")
a_cookie = self.get_secure_cookie("a_cookie")
print(">>> a_cookie ", a_cookie)
self.set_cookie("a_cookie", "a_value")
a_cookie = self.get_cookie("a_cookie")
print(">>> a_cookie ", a_cookie)
输出是:
>>> a_cookie None
>>> a_cookie None
BaseHandler类扩展了tornado.web.RequestHandler。
关于安全cookie,我设置了cookie_secret。
我不明白我设置cookie的原因,我无法理解。我相信我遵循网站上的规则(http://www.tornadoweb.org/en/stable/guide/security.html,https://technobeans.com/2012/08/07/tornado-cookies/)
答案
这里要理解的重要一点是 - 在下一个请求中设置cookie,而不是在当前设置。
get_cookie
获取传入请求中已存在的cookie,即浏览器发送的cookie。
这就是cookie的工作原理:
- 浏览器向服务器发送请求
- 服务器使用cookie向浏览器发送HTTP响应
- 然后浏览器将保存cookie。
- 在此之后的每个请求中,浏览器都会将该cookie发送回服务器。
之后,get_cookie
将能够从传入的请求中获取cookie。
如果第二次运行API
处理程序,您将在输出中看到cookie的值。
有关更多信息,请参阅github上的source code for get_cookie
。
以上是关于我无法在Tornado / Python上设置cookie的主要内容,如果未能解决你的问题,请参考以下文章
使用python中的Tornado模块在handsontable中渲染自定义数据