【问题标题】:I can't set cookies on Tornado/Python我无法在 Tornado/Python 上设置 cookie
【发布时间】:2018-04-17 09:42:35
【问题描述】:

我有一个问题,我不明白原因......基本上我无法在 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/

【问题讨论】:

    标签: python cookies tornado


    【解决方案1】:

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

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


    这是 cookie 的工作原理:

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

    之后,get_cookie 将能够从传入的请求中获取 cookie。


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

    请参阅 github 上的source code for get_cookie 了解更多信息。

    【讨论】:

    • 非常感谢您的解释。现在我明白真正发生了什么。 :D
    猜你喜欢
    • 2020-04-18
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    相关资源
    最近更新 更多