Symfony 6 RequestStack Session 没有获得价值

Posted

技术标签:

【中文标题】Symfony 6 RequestStack Session 没有获得价值【英文标题】:Symfony 6 RequestStack Session not getting value 【发布时间】:2022-01-19 15:05:54 【问题描述】:

到目前为止,我一直在使用 Symfony 5.2。现在我用 Symfony 6 安装了新环境。

现在会话引擎已更改,RequestStack 现在应该使用。 我设置为https://symfony.com/doc/current/session.html

看起来,值正在保存但没有再次加载(会话文件夹包含相应的文件)。

初始路线:

/**
 * @Route(
 *     "/",
 *     name="home",
 *     methods="GET","POST"
 * )
 *
 * @param RequestStack $requestStack
 * @return Response
 */
public function index(RequestStack $requestStack): Response

    $session = $requestStack->getSession();
    $session->set('test','test');

    return $this->render('main/index.html.twig', []);

测试路线:

    /**
 * @Route(
 *     "/test",
 *     name="test",
 *     methods="GET","POST"
 * )
 * @param RequestStack $requestStack
 * @return Response
 * @throws Exception
 */
public function test(RequestStack $requestStack): Response

    $session = $requestStack->getSession();
    echo "Test: ".$session->get('test','err');  // <== I get 'err'

    return $this->render('main/index.html.twig', []);

每次主页刷新,都会创建新的会话文件。 在浏览器中我看不到相应的会话哈希 在 javascriptdocument.cookie = "MyCookie"; 有效

【问题讨论】:

我认为您可能误解了您的链接。曾经有一个 SessionInterface 允许您将会话直接注入服务。 That interface has gone away 并替换为 RequestStack。但是对于控制器操作,您仍然只注入可以使用 $request->getSession() 获取会话的请求。无需更改控制器代码。顺便说一句,您的“初始路线”混淆了您更改了 $request 变量的名称而不是类型。 出于好奇,我在一个新的 6.0 项目中尝试了您的“初始路线”代码,一切似乎都按预期工作。会话 id cookie 已发送并设置了值。刷新并没有改变 id cookie 的值。 谢谢回答。我更改了初始路由,但我仍然无法读取会话,因为浏览器没有将 uid 设置为 cookie。我没有看到问题。 当 6.0 发布时,我做了一个新项目来测试这些东西。 Here is the controller I used。随意克隆 repo 并自己尝试。我怀疑你还有其他事情发生。 我认为系统上一定有任何错误配置。我还在其他服务器上制作了新的简单 6.0 项目,它可以工作。所以我将整个包复制到所需的环境,它不再工作了...... 【参考方案1】:

发现问题:由于更新了Synfony和php,通过域名访问资源需要有证书。安装后让我们加密它可以工作(也适用于内部访问)。

【讨论】:

以上是关于Symfony 6 RequestStack Session 没有获得价值的主要内容,如果未能解决你的问题,请参考以下文章

symfony 参考

Symfony 4 Bundle:AuthenticationUtils 但不存在这样的服务

如何将 $_SERVER 变量注入服务

Symfony 4 中的奏鸣曲 Seo Bundle

Symfony 2.5.6 打破登录?

Symfony2 - 将当前登录的用户注入监听器