【问题标题】:Flask – multiple session cookies with the same nameFlask – 具有相同名称的多个会话 cookie
【发布时间】:2020-08-17 16:41:56
【问题描述】:

我在我的 Flask 应用程序中发现了一个非常奇怪的问题。我发现在某些情况下,可以使用相同的名称创建多个会话 cookie。我附上了一张关于它的图片。它不是特定于浏览器的。

这本身很奇怪,但真正的问题是当我尝试使用CSRF 令牌验证表单时。不幸的是,Flask 选择了错误的会话 cookie,并且 CSRF 令牌的验证无法成功。更奇怪的是,即使提交了多个表单,问题仍然存在。唯一的解决方案是删除普通用户无法选择的 cookie。

是否有任何选项可以阻止 Flask 创建具有相同名称的 cookie? 或者至少有一个选项可以从我的应用程序中获取所有 cookie 名称?在这种情况下,至少我可以删除具有相同名称的会话 cookie。

【问题讨论】:

  • 在你的截图中添加标题,这样更容易看到问题
  • 您如何在生产环境中运行您的应用程序,使用 WSGI 层还是使用内置的 Flask 开发服务器?当开发服务器在调试模式下运行时,它会启动第二个实例来监视更改,我可以看到这可能会导致生产中的问题,因为该服务器实际上是单请求的,并且可能会跨越值。你能用你的堆栈详细信息更新帖子吗?
  • 项目正在开发中。有几次我用 gunicorn (gunicorn -c gunicorn_config.py --bind 127.0.0.1:5070 wsgi:app) 运行它,但大多数时候我使用 Flask 开发服务器: FLASK_APP=server.py FLASK_ENV=development flask run --port 5070 我猜是什么导致了这个问题:提交表单时有一个并行的 AJAX 请求。我修复了这个错误,现在我的“问题”是我无法重现这种不寻常的行为。
  • 如何故意创建具有相同名称的会话 cookie 也是一个很好的问题?我的意思是来自应用程序而不是某种 cookie 编辑器。我以前从未见过这样的事情。
  • 没有标头和/或 cookie 上下文,很难确定发生了什么。 Cookie 之间有何不同?

标签: session flask cookies session-cookies csrf


【解决方案1】:

没有代码,很难分辨Flask在哪里生成了多个同名的cookie,但是有可能你让cookie存活的时间很长,请看Flask: How to remove cookies?处理这个问题。

如果我理解正确,另一个主要问题是 [comment by me]:

Flask 选择了一个错误的会话 cookie [多个同名的]

从多个具有相同名称的 cookie 中选择错误的 cookie 不是特定于 Flask 的,而是关于客户端/浏览器使用的逻辑,参见例如How to handle multiple cookies with the same name?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多