【问题标题】:PHP header() redirect to the same page before the right onePHP header() 重定向到正确页面之前的同一页面
【发布时间】:2018-11-04 21:50:58
【问题描述】:

我这里有一个 index.php 文件:

<?php

session_start();
var_dump($_SESSION['modals']);
$_SESSION['modals'] = [];

?>

还有一个 redirect.php 文件:

<?php

session_start();
$_SESSION['modals'][] = ['title' => "test", 'msg' => "message to show"];
header('Location: index.php', true, 301);
exit();

?>

如您所见,这些都是非常基本的。

我遇到的问题是,如果我连续加载页面 redirect.php 2 或 3 次,它只会在 $_SESSION['modals'] 变量中显示一个条目,这是应该的。但是,如果我连续多次加载redirect.php 页面,通常是4 次或更多,它就会开始出错。 $_SESSION['modals'] 有时包含 2 个条目,有时包含 1 个。

我不明白为什么?

提前感谢您的回复!

【问题讨论】:

    标签: php http-headers session-variables


    【解决方案1】:

    根据您的会话处理程序,可能有也可能没有会话锁定。此外,浏览器在收到301 重定向时不会完全等待。

    我怀疑您的会话数据在第二个脚本打开之前没有保存。

    【讨论】:

    • 我不明白为什么问题应该与会话有链接?因为它已正确保存,甚至/但有时是 2 次而不是 1 次。正如您所描述的,它甚至不应该在会话中保存 1 个条目,但是,事实并非如此,甚至相反。
    • @FlorentBanneux 会话数据不一致不是您的全部问题吗?对我来说,这听起来就像两个不同的脚本互相踩踏一样。
    • 你当然是对的。您有什么简单的解决方案可以在会话中保存条目并在之后立即重定向用户吗?
    • @FlorentBanneux 您使用的是什么会话处理程序?您可以在重定向之前尝试session_write_close()
    • @nrad 没有特别的!目前使用 XAMPP,这是纯香草代码.. :( 很快就会检查您的解决方案,完成后让您保持最新状态(idk when :p)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多