[英]Symfony 3.4 $_SESSION in controller
我有一個以.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']
?
最好的方法是創建接受令牌參數的路由,進行將令牌參數保存在會話中的操作,並重定向用戶。
如果需要對所有路由重復此行為,請在請求事件中使用偵聽器。
編輯:有關我的答案的更多信息
第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
}
}
我嘗試了所有人提出的所有建議,但沒有任何建議可以幫助我,因此在論壇上閱讀我的帖子時,請注意以下內容:
php_value session.auto_start 0
我將其放在.htaccess
文件中,Symfony不再覆蓋$_SESSION
變量,並且可以在控制器中的任何位置訪問它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.