Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php $\u服务器[';HTTP#u REFERER';]无法使用标头_Php - Fatal编程技术网

Php $\u服务器[';HTTP#u REFERER';]无法使用标头

Php $\u服务器[';HTTP#u REFERER';]无法使用标头,php,Php,我有一个允许公众访问某些页面的网站,但其他页面需要登录。我有一个从所有页面到登录的链接,成功登录后我想做的是将用户发送回他们单击登录链接时所在的页面。我知道HTTP_REFERER可以被欺骗,有时会被某些主机和代理删除,但由于它严格地在我自己的网站内,而且只是为了方便用户,所以我不太担心它 不过,我很好奇为什么它不能与重定向一起工作。我已经设置了一个可见字段来包含http referer的值,并且它显示正确。因此,页面正在获取referer变量的值。但当我尝试这个: $home_url = $

我有一个允许公众访问某些页面的网站,但其他页面需要登录。我有一个从所有页面到登录的链接,成功登录后我想做的是将用户发送回他们单击登录链接时所在的页面。我知道HTTP_REFERER可以被欺骗,有时会被某些主机和代理删除,但由于它严格地在我自己的网站内,而且只是为了方便用户,所以我不太担心它

不过,我很好奇为什么它不能与重定向一起工作。我已经设置了一个可见字段来包含http referer的值,并且它显示正确。因此,页面正在获取referer变量的值。但当我尝试这个:

$home_url =  $_SERVER['HTTP_REFERER'];
header('Location: ' . $home_url);
它不起作用。另一方面,这有:

$home_url = 'http://' . $_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/discussions.php';
header('Location: ' . $home_url);
所以我知道标题位置部分是有效的。你知道为什么它不想与http_referer变量一起工作吗


(还有,referer拼写错误会让其他人发疯吗?我一直用OED拼写错误,傻瓜…

在第一个示例中,
$\u SERVER['HTTP\u referer']
的值是多少?设置正确吗


您知道,如果您只是在地址栏中键入URL,大多数浏览器都不会发送referer字符串。

在登录验证页面中,referer将是登录页面,而不是原始页面(除非您使用存储在cookie或HTTP basic/digest auth中的凭据)

您可以做的是,在登录页面中,用户在其中输入详细信息,在登录页面请求的referer中有一个隐藏字段,然后将其传递给验证登录并在登录成功时进行转发的脚本

更好的是:由于用户可能不发送referer(在大多数浏览器中是可配置的),因此在查询字符串中包含登录页面的链接,即原始页面。然后按上述步骤进行,但使用此值而不是referer

要明确的是:

<form method="post" action="login">
...
<input name="user" type="text" />
<input name="password" type="password" />
<input name="referer" type="hidden" value="<?php echo urlencode($_SERVER['HTTP_REFERER']) ?>" />
</form>

...

谢谢-我几分钟前在吃晚饭的时候就想到了。
<?php
if (login_is_successful() && !empty($_POST['referer']) && !is_array($_POST['referer'])) {
    header("Location: ".urldecode($_POST['referer']));
    die();
}