我的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
答案 0 :(得分:8)
这是为了防止session fixation。我会建议另一个cookie,然后是一个用于负载均衡的会话。
答案 1 :(得分:1)
这可能是个错误。对于symfony2.0,如果您尝试从会话中读取某些内容,或者甚至在未调用SessionListener时尝试获取会话标识符,您会注意到新会话是使用另一个PHPSESSID启动的。
这也可以与语言环境支持相关,这是我的问题:https://github.com/symfony/symfony/issues/3662