如果直接使用 PHP 访问,请将访问者重定向到另一个页面


Redirect visitors to another page if accessed directly using PHP

>我有一个register.php页面,允许访问者注册成为某些用户。如果它们满足表单验证设置的所有要求,它们将被重定向到另一个页面,称为thankyou.php页面。

我的问题是,如果有人尝试直接访问thankyou.php页面而不通过/从register.php页面访问,那么它应该再次将他们重定向回register.php页面

注意:我知道如何为登录用户使用$_session = array();,并且header()功能很好。再一次,这里的问题需要对如何限制访问者直接访问thankyou.php进行某种研究(因为访问者尚未成为网站的用户)。

请不要用jquery或javascript或任何其他语言指导我。我需要你在 php 方面的帮助。

谢谢!

在寄存器中.php您可以在 $_SESSION 中设置一个键。例如

$_SESSION['justRegistered'] = true;

并检查它以感谢.php

if (!empty($_SESSION['justRegistered'])) {
    unset($_SESSION['justRegistered']);
    // Say Thank You
} else {
    header('Location: ... register.php');
}

您必须首先检查是否设置了与正确重定向到thankyou.php关联的$_SESSION变量。

之后,您必须检查用户$_SERVER['HTTP_REFERER']是否符合要求,即$_SERVER['HTTP_REFERER'](包含引荐 URL)是否以 register.php 结尾并且域是您的域。

建议你做一些类似的事情(我假设你定义了一个常量YOUR_HOST并使用了一个会话变量。也用你的改变它):

if(empty($_SESSION['ok']) || empty($_SERVER['HTTP_REFERER'])) {
    die(header('Location /register.php'));
}
$url = parse_url($_SERVER['HTTP_REFERER']);
if($url['host'] !== YOUR_HOST || $url['path'] !== 'register.php') {
    die(header('Location /register.php'));
}
// else show the thankyou page content
您可以在

感谢中查看$_SERVER['HTTP_REFERRER'].php .

if($_SERVER['HTTP_REFERRER'] != 'your referrer page'){
  header('location: yourtarget.php');
  die();
}

使用会话也是更好的方法。

实现所需目标的一种简单方法是将会话变量从 register.php 发送到 thankyou.php 。会话是获取权限的好方法。

register.php -> $_SESSION['myvariable'] = 'something'thankyou.php,您将可以访问会话变量,如果设置了变量,那么您可以留在该页面或做任何您想做的事情。请记住,您必须恢复会话,并在每个页面中session_start()