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

时间:2012-06-19 00:01:43

标签: php http symfony

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

这里有一些细节。

要登录我的应用程序,我必须首先向点击我应用的网址发出请求:

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

我被重定向到另一个网址(/login)并获得了PHPSESSID Cookie。精细。然后我POST/login_check之类的_username=blah&_password=blah,以及我是否提供了正确的凭据,我发送了一个不同的PHPSESSID Cookie。

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

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

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

可能重复:Symfony2: login does not work on first try after clearing cookies

2 个答案:

答案 0 :(得分:8)

这是为了防止session fixation。我会建议另一个cookie,然后是一个用于负载均衡的会话。

答案 1 :(得分:1)

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

这也可以与语言环境支持相关,这是我的问题:https://github.com/symfony/symfony/issues/3662