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', []);
每次主页刷新,都会创建新的会话文件。
在浏览器中我看不到相应的会话哈希
在 javascript 中 document.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 没有获得价值的主要内容,如果未能解决你的问题,请参考以下文章