会话已在FOS用户捆绑注册确认中启动

时间:2013-09-01 16:41:36

标签: php session symfony fosuserbundle

我正在使用FOSUserBundle进行用户注册。当用/ register / confirm / xxxx-token-xxxxx确认用户时,我有时会收到错误“无法启动会话:已经由PHP启动($ _SESSION已设置)。”

这发生在NativeSessionStorage :: start()方法中。显然已经有一个会话(在这种情况下$ _SESSION是一个空数组)。

这种行为很难再现。它大部分时间都有效。我在dev和prod环境中看到了这一点(两者都是php 5.3.x)

在初始化会话时,为什么$ _SESSION是一个空数组?

1 个答案:

答案 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()。