我无法在Tornado / Python上设置cookie

时间:2017-11-04 22:52:35

标签: python cookies tornado

我遇到的问题是我不明白原因......基本上我无法在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.htmlhttps://technobeans.com/2012/08/07/tornado-cookies/

1 个答案:

答案 0 :(得分:5)

这里要理解的重要一点是 - Cookie会在下一个请求中设置,而不是在当前上设置。

get_cookie获取传入请求中已存在的Cookie,即浏览器发送的Cookie。

Cookie的工作方式如下:

  1. 浏览器向服务器发送请求
  2. 服务器使用cookie向浏览器发送HTTP响应
  3. 然后浏览器将保存cookie。
  4. 在此之后的每个请求中,浏览器都会将该cookie发送回服务器。
  5. 之后,get_cookie将能够从传入的请求中获取cookie。

    如果您第二次运行API处理程序,您将在输出中看到cookie的值。

    有关详情,请参阅github上的source code for get_cookie