3

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

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

这种行为很难重现。它大部分时间都有效。我在开发和生产环境中看到了这一点(都是 php 5.3.x)

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

4

1 回答 1

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

于 2013-12-02T09:07:00.003 回答