为什么 Symfony2 在登录时会替换 PHPSESSID


Why does Symfony2 replace PHPSESSID upon login?

我的Symfony2应用程序在登录我时替换了我的PHPSESSID cookie。这是预期行为吗?这对我来说毫无意义...为什么不保持相同的PHPSESSID

这里有更多细节。

要登录到我的应用程序,我必须首先向访问我的应用程序的 URL 发出请求:

$ telnet myapp 80
GET / HTTP/1.1
Host: myapp

我被重定向到另一个URL(/login),并给出了一个PHPSESSID cookie。好。然后我POST /login_check类似 _username=blah&_password=blah 的东西,无论我是否提供正确的凭据,我都会收到一个不同的 PHPSESSID cookie。

似乎大多数东西都适用于第一个请求,但我必须提出一些请求(我不能只POST /login_check并登录)。这是预期行为吗?

不确定这是否重要,但我正在使用 FOSUserBundle。

我想我应该提到,在我将应用程序放在负载均衡器后面的两个 Web 服务器上并告诉负载均衡器使用基于PHPSESSID的粘性之前,这一切都无关紧要。正如您可能想象的那样,如果客户端碰巧反弹到另一个 Web 服务器,PHPSESSID替换行为会阻止登录工作。

可能的重复:Symfony2:清除cookie后第一次尝试登录不起作用

这是为了防止会话固定。我会建议另一个cookie,然后是会话一个进行负载平衡。

这可能是一个错误。对于symfony2.0,如果你尝试从会话中读取某些内容,甚至在SessionListener尚未被调用时尝试获取会话标识符,你会注意到新会话是用另一个PHPSESSID启动的。

这也可能与区域设置支持有关,这是我的问题:https://github.com/symfony/symfony/issues/3662