我正在使用FOSUserBundle进行用户注册。当用/ register / confirm / xxxx-token-xxxxx确认用户时,我有时会收到错误“无法启动会话:已经由PHP启动($ _SESSION已设置)。”
这发生在NativeSessionStorage :: start()方法中。显然已经有一个会话(在这种情况下$ _SESSION是一个空数组)。
这种行为很难再现。它大部分时间都有效。我在dev和prod环境中看到了这一点(两者都是php 5.3.x)
在初始化会话时,为什么$ _SESSION是一个空数组?
答案 0 :(得分:0)
我在重定向之前解决了会话无效的问题。
在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_start()和session_destroy()。