我正在使用 FOSUserBundle 进行用户注册。当使用/register/confirm/xxxx-token-xxxxx 确认用户时,我有时会收到错误消息“无法启动 session :已由 PHP 启动($_SESSION 已设置)。”
这发生在 NativeSessionStorage::start() 方法中。显然已经有一个 session (在这种情况下,$_SESSION 是一个空数组)。
这种行为很难重现。它大部分时间都有效。我在 dev 和 prod 环境(均为 php 5.3.x)中看到了这一点
知道为什么 $_SESSION 在初始化 session 时是一个空数组吗?
最佳答案
我解决了在重定向之前使 session 无效的问题。
在 RegistrationController(我已经复制到我的包中并进行了修改)的方法 confirmAction 中,我更改了:
if (null === $response = $event->getResponse()) {
$url = $this->container->get('router')->generate('fos_user_registration_confirmed');
$response = new RedirectResponse($url);
}
到:
if (null === $response = $event->getResponse()) {
$session = $request->getSession();
$session->invalidate();
$url = $this->container->get('router')->generate('fos_user_registration_confirmed');
$response = new RedirectResponse($url);
}
这对我有用。
Symfony 建议不要使用标准的 PHP session 方法,例如 session_start() 和 session_destroy()。
关于php - session 已在 FOS User Bundle Registration Confirmation 中开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18560567/