控制器中的Symfony 3.4 $ _SESSION

时间:2019-01-29 11:26:48

标签: php symfony symfony-3.4

我有一个以.php文件开头的应用。 在此文件中,我做了一些工作,但最后我做了两件事,我生成一个值并保存在$_SESSION中并重定向到其他路由:

php文件不在Symfony文件夹中:

<?php
session_start();

...Do some work

$_SESSION['token'] = 'some value';
header ("Location: new direction");
?>

重定向,重定向到symfony文件夹,并开始将symfony部分转到我的src/AppBundle/Controller/MainController

在此控制器中处理的第一个动作中,我需要访问$_SESSION['token']的值,以便在控制器动作中对该值进行一些处理。这是控制器:

<?php

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;

class MainController extends Controller
{
    public function homepageAction(Request $request)
    {
        dump($_SESSION);
        die;

        ...Some work
    }
}
?>

dump($_SESSION)显示如下:

enter image description here

但是我找不到我的$_SESSION['token']

我是否需要使用一些Symfony组件来访问控制器内的PHP $ _SESSION值?

或者如何在控制器中访问$_SESSION['token']

2 个答案:

答案 0 :(得分:1)

最好的方法是创建接受令牌参数的路由,进行诸如在会话中保存令牌参数的操作,并重定向用户。

如果您需要对所有路由重复此行为,请在请求事件中使用侦听器。

编辑:有关我的答案的更多信息

第1步:设置令牌值

第2步:重定向到接受令牌参数的Symfony路由

第3步:根据令牌值应用自己的逻辑

<?php

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;


/**
 * @Route("/{token}", defaults={"token"=null})
 */
class MainController extends Controller
{

    public function homepageAction(Request $request, SessionInterface $session, ?string $token)
    {
        if ($token) {
            $session->set('token', $token);
        }

        ...Some work
    }
}

答案 1 :(得分:0)

我尝试了所有人提出的所有建议,但没有任何建议对我有帮助,因此在论坛上阅读我的帖子时,会出现以下提示:

php_value session.auto_start 0

我将其放在.htaccess文件中,而Symfony不再覆盖$_SESSION变量,我可以在控制器中的任何位置访问它。