python - 我无法在 Tornado/Python 上设置 cookie

标签 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。

关于secure cookie,我设置了cookie_secret。

我不明白设置cookie时无法获取的原因。我相信我遵守了网站上的规则(http://www.tornadoweb.org/en/stable/guide/security.htmlhttps://technobeans.com/2012/08/07/tornado-cookies/)

最佳答案

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

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


这就是 cookie 的工作原理:

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

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


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

参见 source code for get_cookie在 github 上获取更多信息。

关于python - 我无法在 Tornado/Python 上设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47116421/

相关文章:

Python语法错误: ("' return' with argument inside generator",)

python - 为 Tornado 中的所有请求设置 header

python Pandas : Denormalize data from one data frame into another

Python:将 1×28×28 数组转换为 28×28 矩阵

python - Python 的重试装饰器的动态参数

c# - 覆盖 cookie 时出现问题

html - 我如何将 bool 值写入 cookie 或从 cookie 读取 bool 值?

java - 持久登录 cookie,避免垃圾邮件,并使用 yahoo facebook id

python - 在 Tornado 网络服务器中运行 Python 脚本

python - 通过 Python 使用 Watson Assistant/Watson Conversation