如果有人来自不同的页面,这是一个应该重定向的小脚本,但它不起作用。 它会一直重定向到表单页面。
这是代码
<?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>
答案 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变量,请记住这一点。