脚本重定向即使有效

时间:2012-02-13 11:34:28

标签: php

如果有人来自不同的页面,这是一个应该重定向的小脚本,但它不起作用。 它会一直重定向到表单页面。

这是代码

<?php

define('FORM', 'form.html');
$referer = $_SERVER['HTTP_REFERER'];

// this keeps redirecting even when I came by submiting the form to this page
if ( $referer != FORM ) {
   header('Location: ' .FORM);
}
?>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Testing 123</title>
</head>

<body>
  <?php
        $name  = $_GET['name'];
        $surname  = $_GET['surname'];
        echo 'hello'. $name. 'nice to see you here mr' .$surname;
    ?>
</body>
</html>

2 个答案:

答案 0 :(得分:1)

我认为导致你麻烦的是你在调用header()后不退出脚本:

header('Location: ' . FORM);
exit;

无论如何,您应该考虑检查所需的参数,而不是依赖$_SERVER['HTTP_REFERER'],因为可以在用户的​​浏览器中禁用发送referrer-info。

isset($_GET['name']) : $name = $_GET['name'] ? $name = null;
isset($_GET['surname']) : $surname = $_GET['surname'] ? $surname = null;

if (empty($name) || empty($surname)) {
    header('Location: ' . FORM);
    exit;
}

此外,您应该在输出之前逃离$_GET['name']$_GET['surname']

答案 1 :(得分:1)

您可以通过检查是否已发送某个$ _POST变量来测试用户是否来自“表单页面”。例如,您可以尝试类似

的内容
if(isset($_POST['somehiddenvalue']) && $_POST['somehiddenvalue'] == $hiddenVal) {
   // ok.
} else {
   // redirect
}

用户仍然可以操作Post变量,请记住这一点。