php - session 已在 FOS User Bundle Registration Confirmation 中开始

标签 php session symfony fosuserbundle

我正在使用 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/

相关文章:

php - Prestashop - 验证付款后更改订单状态

javascript - 如何使用 javascript 在 azure 函数应用程序中使用服务总线主题 session

forms - Symfony 3 - 表单集合字段在字段外显示错误

symfony - 选择一个单选按钮功能测试Symfony2

php - 如何从.env变量处理%kernel.project_dir%?

PHP fatal error : Call to undefined function password_verify()

PHP trim/rtrim/ltrim VS 正则表达式

php - 使用 PHP 对文档进行数字签名

node.js - NodeJS + MongoDB + Redis : Register and login - sessions issue

asp.net - ASP.NET 中的 session 超时