【发布时间】:2012-03-01 22:05:54
【问题描述】:
我继承了一个 symfony2 项目,该项目在实时环境中运行在超过 2 个负载平衡服务器中。由于这个原因,会话存储在应用程序使用的 mysql 数据库中。
我遇到的问题是,在具有 CSRF 保护的表单上,有时令牌返回无效。我猜这是因为生成令牌的服务器并不总是获取表单 POST 并且无法匹配正在发送的令牌的服务器。
我对 symfony 非常非常陌生,并且尝试了几种不同的解决方案来使用 Symfony 框架中的会话和 SessionCsrfProvider 生成令牌。
谁能指出我正确的方向或遇到过类似的问题?
【问题讨论】:
-
会话是否按预期工作?
-
是的,用户的会话管理工作正常。如果将表单回发到并非源自它的服务器,则只会触发 csrf 令牌警告。我已经通过使用 IP 地址在其中一台负载平衡服务器上进行了测试。
-
我正在努力理解 SessionCsrfProvider 是否正在使用存储在数据库中的会话。有什么调试技巧吗?由于我们拥有的唯一负载平衡环境是实时的,因此测试起来很棘手。谢谢
-
您是否验证过parameter.ini 中的密钥在两台服务器上是否相同?我唯一遇到的麻烦是当我更改已部署应用程序中的密钥时。我想你可以创建自己的 SessionCsrfProvider 并进行一些日志记录(服务器主机、用户 IP 地址、会话 ID)来尝试跟踪。
-
感谢您的建议,由于某种原因,密钥不一样,我更正了此问题并重新启动了 apache,但问题仍然存在。
标签: mysql session symfony load-balancing