簡體   English   中英

控制器中的Symfony 3.4 $ _SESSION

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM