我有一个与此类似的问题,但略有不同。
我的结构是这样的:用户想要访问的页面类似于 displayData.php。这是他们最终应该回到的页面。此页面检查您是否已登录并且会话未过期,如下所示:
if ($_SESSION["loggedIn"] != "YES")
{
header ("Location: ".$baseURL."timeout.php");
exit();
}
在 timeout.php 上,我检查了引用者:
<?php
session_start();
$_SESSION['redirect'] = $_SERVER['HTTP_REFERER'];
$_SESSION["errorMessage"] = "Your session has timed out or<br>you have not logged in correctly.";
header ("Location: index.php");
exit();
?>
问题出现在用户提交登录表单和登录页面检查是否有推荐人之后。但是,我们已经确定他们拥有正确的登录信息。
if(isset($_SESSION['redirect'])){
header ("Location: ".$_SESSION['redirect']);
}else{
header ("Location: menu.php");
}
我认为从逻辑上讲,当超时页面将变量设置为 时$_SERVER['HTTP_REFERER'];
,它会将其设置为重定向到 timeout.php 的页面,在本例中为 displayData.php。然而,似乎相反,它将它设置为 displayData.php 的引用者(可以是任何东西,但它不是我们想要发送用户的内容)。
这是 HTTP_REFERER 的预期效果,如果有标头重定向则不更新?如果是这样,那太糟糕了,我需要重写大约 80 个文件来更改登录/超时系统。我希望有一个更简单的方法。我们会在基于函数的系统中完成此操作,但我们目前正在尝试扩展遗留代码。
非常感谢。
编辑:
在这里稍微清楚一点。把它想象成一个文件夹,/admin/。displayData.php 是许多只能通过登录才能访问的文件之一(因此,当检测到他们未登录时,我们不知道他们试图访问的特定页面)。当会话到期时(或者如果根本没有会话),这些页面中的每一个都会重定向到 timeout.php,因此我希望 timeout.php 能够确定之前没有会话访问过的页面,然后保存该信息,以便以后可以将用户重定向回他们在我们网站上请求的原始页面。
我想通过 timeout.php 文件来做这件事的原因是因为有很多文件就像 displayData.php 一样,如果我不需要,我不想编辑每个文件来改进系统,暂且。
如果这还不够清楚,请告诉我。