我有一个以.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)
显示如下:
但是我找不到我的$_SESSION['token']
我是否需要使用一些Symfony组件来访问控制器内的PHP $ _SESSION值?
或者如何在控制器中访问$_SESSION['token']
?
答案 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
变量,我可以在控制器中的任何位置访问它。