如何在PHP中检查页面是直接加载还是从其他页面重定向?

如何在PHP中检查页面是直接加载还是从其他页面重定向?,php,redirect,pageload,Php,Redirect,Pageload,假设我有两个页面Page1.php和Page2.php。有时直接加载Page1.php,有时从Page2.php重定向。我的问题是,我可以检查Page1.php是直接加载的还是从Page2.php重定向的(如果未使用查询字符串)在Page2.php中设置会话变量,并在Page1.php中对其进行控制 Page2.php <?php session_start(); $_SESSION['from2'] = true; header('Location: /Page1.php'); ?>

假设我有两个页面Page1.php和Page2.php。有时直接加载Page1.php,有时从Page2.php重定向。我的问题是,我可以检查Page1.php是直接加载的还是从Page2.php重定向的(如果未使用查询字符串)

在Page2.php中设置会话变量,并在Page1.php中对其进行控制

Page2.php

<?php
session_start();
$_SESSION['from2'] = true;
header('Location: /Page1.php');
?>
<?php
session_start();
if(isset($_SESSION['from2']) && $_SESSION['from2']) {
  /* from Page2.php logic here */

  unset($_SESSION['from2']);
}else{
  /* not from Page2.php */
}
?>

Page1.php

<?php
session_start();
$_SESSION['from2'] = true;
header('Location: /Page1.php');
?>
<?php
session_start();
if(isset($_SESSION['from2']) && $_SESSION['from2']) {
  /* from Page2.php logic here */

  unset($_SESSION['from2']);
}else{
  /* not from Page2.php */
}
?>


您可以读取全局变量的值
$\u SERVER['HTTP\u REFERER']
$\u SERVER['HTTP\u REFERER']

尽管查看手册以了解其不可信的原因:

您想做什么/为什么要这样做?可能还有另一个解决方案。这是因为我有login.php页面和validation.php页面。在验证页面中,用户名和密码与数据库值匹配,如果不匹配,则重定向到login.php页面。所以在重定向时,我需要在登录页面中显示一些错误消息,如果没有,我就不需要了。如果对正确性的要求很低,这可能会起作用。Referer字段在HTTP中是可选的,有些浏览器不发送它们(我在我的浏览器中禁用了它,有些防火墙从请求中删除了它)。我想您可以使用它,但不能用于关键应用程序(不可靠),因为Referer可以被欺骗。然后,我认为使用会话的Emil的答案更安全。但是,如果您不在URL中传递任何参数,这仍然是唯一明智的方法。当然,您也可以尝试存储记住当前页面的cookies,但这也不是100%安全的。