首页 > 解决方案 > 重定向时会话未写入

问题描述

编辑:
我发现了问题,这是在一些遗留代码中完成的,由于某种原因,session_write_close()在我写入会话之前,代码的不同部分中有一个调用关闭了会话。

我一直在制作一个小 php 类来写入会话(主要用于单个请求的事情),并且我在写入会话时遇到了麻烦。当我写入会话时,它看起来正在工作并且我可以在 xdebug 中看到它,然后我尝试重定向回另一个页面但是当我进入新请求时它不会保存到会话中。

我写信给会议是这样的:

public function flash($key, $value = null)
{
    if (is_null($value)) {
        return $this->flash[$key];
    }
    $_SESSION['flash'][$key] = $value;
}

然后像这样重定向:

session_write_close();
header('Location: ' . $location, true, $status);
exit;

我似乎无法弄清楚为什么会话变量不保存,session_write_close()函数返回false所以我知道它没有保存。但是当我不使用重定向时,它会保存。
编辑:会话开始使用每个请求session_start()

我希望有人知道可能发生的事情并可以帮助我。
提前致谢 :)

编辑:根据文档的意思,session_status()我得到一个返回值,或者但我可以看到其他会话值已设置并保存。1PHP_SESSION_NONEsessions are enabled, but none exists

我检查了会话 ID,如果它与我的 cookie 中的相同,则它们是相同的。我也尝试在类/方法之外写入会话,这似乎也有效,我尝试设置没有状态码的标题,以查看是否改变了某些内容,但没有。

标签: phpsession-variablesphp-7

解决方案


推荐阅读