如何访问控制器中的会话变量

Posted

技术标签:

【中文标题】如何访问控制器中的会话变量【英文标题】:How to access the session variable in the controller 【发布时间】:2013-05-28 04:28:46 【问题描述】:

我在一个控制器中创建了一个会话变量,我想在另一个控制器中访问它。在loginsuccess 控制器中,我设置了会话:

$session->set('id',$id);

如何在另一个控制器中访问此变量?

【问题讨论】:

【参考方案1】:

您应该使用session 服务:

$id = $this->get('session')->get('id');

$this->get('session')->set('id', $id);

【讨论】:

我同意,这是一个更好的方法。 给我Undefined method get【参考方案2】:

虽然 Cyprian 答案有效,但您会在文档中找到以下用法:

use Symfony\Component\HttpFoundation\Session\Session;

$session = new Session();
$session->start();

// set and get session attributes
$session->set('id',$id);
$session->get('id'); //this is the line you are looking for

http://symfony.com/doc/master/components/http_foundation/sessions.html

注意:

虽然建议显式启动会话,但会话将 实际上是按需启动的,也就是说,如果有任何会话请求 读/写会话数据。

【讨论】:

好点。但请注意,这是组件文档。实际上,根据框架文档,还有第三种使用会话服务的方法:symfony.com/doc/current/book/… :) 但是,也许值得补充的是,从请求对象返回的会话对象与从服务容器返回的会话对象完全相同 由于问题是关于从控制器访问会话,因此您的回答更有意义。但正如您所说,可能值得一提的是$this->getRequest()->getSession() 在这种情况下也有效!【参考方案3】:

一般来说,如果您的控制器从基础 Symfony 控制器 (Symfony\Bundle\FrameworkBundle\Controller\Controller) 扩展而来,您可以通过 3 种方式获取会话:

    $session = $this->container->get('session'); $session = $this->get('session');(基本上是1的捷径) $session = $request->getSession();

【讨论】:

【参考方案4】:

还有第三种写评论的方式:

use Symfony\Component\HttpFoundation\Session\SessionInterface;

public function indexAction(SessionInterface $session)

     $session->set('test', 'yes !');

这种方式可以让你得到类型提示的变量,这样你就可以在你的IDE中访问Session对象的方法。

【讨论】:

以上是关于如何访问控制器中的会话变量的主要内容,如果未能解决你的问题,请参考以下文章

无法访问 Kohana 控制器中的会话变量

codeigniter 无法访问另一个控制器中的会话数据

从模块访问会话变量或控制器变量

PHP MVC 最佳实践 - 将 Session 变量从控制器传递给模型类或直接在模型中访问

没有登录会话,任何人都无法访问 codeigniter 4 中的控制器

销毁会话,但保留一个变量集