【发布时间】: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