PHP 8.1 会话变量在使用标题重定向后消失(“位置”

问题描述 投票:0回答:0

在登录页面后,我们可以看到 $_SESSION 数组的内容,但是在 header 指令之后,变量 $_SESSION 消失了。

我们的应用程序有多种登录方式(一种使用用户名/密码),效果很好,另一种使用 simplesaml 1.19 进行 SSO 的方式不起作用

simplesaml 访问后,我们有一个很好的结果,(令牌看起来很好)并且 simplesaml 会话被清理

require_once('simplesaml/lib/_autoload.php');
$aSource = new \SimpleSAML\Auth\Simple('XXX');
$aSource->requireAuth();
$attributes = $aSource->getAttributes();
$sess_saml = SimpleSAML_Session::getSessionFromRequest();
$sess_saml->cleanup();
unset($aSource);

然后用正确的值创建 $_SESSION,然后它重定向到 main.php 页面,$_SESSION(完全擦除,空的,所以用户无法登录)然后循环回到登录页面(有一个好的 SAML 令牌,然后重新循环)。

这段代码在 PHP 7.4 和 Simplesaml 1.15 上运行良好

我们看到 PHP8.1 中有一个新的 session.cookie_samesite,我们已经尝试了所有变体(LAX、None、Strict)但在脚本之后仍然不是有效的 $_SESSION

header('location:main.php');
exit;

在 header 命令之前我们有一个完整的 $_SESSION 变量(以及数组中的正确值),但是在“main.php”中的第一条指令之后,即 session_start() 并且 $_SESSION 为空

我们已经能够指出 $_SESSION 被重定向清除(因此我们认为不涉及 simplesaml)但是会话管理(当调用中有不止一种类型的 $_SESSION 时,我们这样做不明白)。是环境问题吗?我们的环境是Windows Server 2022, IIS-10, PHP8.1, MySQL8

session header simplesamlphp php-8.1
© www.soinside.com 2019 - 2024. All rights reserved.