我的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