假设我有两个页面page1.php
和page2.php
,我希望page2.php
仅在page1.php
重定向时显示,并且我将此代码插入{{ 1}}
page2.php
此代码正常工作,直到我在if($_SERVER['HTTP_REFERER'] == "page1.php")
{
//keep displaying page2.php
}else{
//if it is not redirected from page1.php
header('Location:page1.php')
//redirect the user back to page1.php
}
上有一个表单和提交按钮,当点击提交按钮时页面刷新,这意味着page2.php
将更改为HTTP_REFERER
所以我{ {1}}失败了,它让我回到page2.php
我不希望这种情况发生。有什么办法可以防止这种情况发生吗?
提前致谢。
答案 0 :(得分:3)
我不建议使用HTTP_REFERER:
在浏览器中操作相当简单。
某些用户可能在其浏览器中设置了安全设置,根本不会发送此标题。
无法通过HTTPS访问。
某些代理会从请求中删除此标题
已添加 - 请参阅this quesion的答案
正如Charlotte Dunois在评论中所述,在发送表格之前更好地设定会话价值,然后在第2页上查看。
page1.php中:
$_SESSION[ 'display_page2' ] = TRUE;
//rest of the content
使page2.php:
if ( (isset( $_SESSION[ 'display_page2' ] ) && $_SESSION[ 'display_page2' ] === TRUE ) || isset( $_POST[ 'some_form_input' ] ) ) {
//keep displaying page2.php
} else {
header('Location:page1.php');
exit;
}
使用isset( $_POST[ 'some_form_input' ] )
,您可以检查表单是否已发送(通过POST方法)。
如果需要,您可以使用unset( $_SESSION[ 'display_page2' ] );
取消会话或将其设置为不同的值。
答案 1 :(得分:1)
<?php
if(($_SERVER['HTTP_REFERER'] == "page1.php") || (isset($_POST['submit']) && $_SERVER['HTTP_REFERER']=="page2.php"))
{
//keep displaying page2.php
}else{
//if it is not redirected from page1.php
header('Location:page1.php');
//redirect the user back to page1.php
}
?>
如果推荐人不是第1页,您可以检查条件,如果referrer = page2并且提交了帖子。 或检查推荐人是否为第1页或提交帖子。 这是避免你的问题的可能性。
答案 2 :(得分:1)
我建议不要使用$_SERVER['HTTP_REFERER']
,因为它很容易被欺骗。
相反,您可以在输出任何标记之前使用setcookie("page1", 1);
加载第1页时设置cookie。然后使用
if(isset($_COOKIE['page1']))
{
//keep displaying page2.php
}else{
//if it is not redirected from page1.php
header('Location:page1.php')
//redirect the user back to page1.php
}
如果未指定过期日期,则cookie将在浏览器关闭时过期。在这种情况下,使用cookie还可以为其他人提供更易读的代码。
答案 3 :(得分:0)
<?php
/*
this page allows links from the following pages
public.php?id=links
private.php?id=links
don't allow if visitors come from anywhere else
this example would only work if I used the entire URL in the 'if' statement
*/
$referringpage = $_SERVER['HTTP_REFERER'];
if ( $referringpage == "http://www.example.com/public.php?id=links" ) {
$pass = "yes";
} elseif ( $referringpage == "http://www.example.com/private.php?id=links" ) {
$pass = "yes";
} else {
$pass = "no";
}
if ( $pass == "yes" ) {
// do the function this page was made to do
}
header( "Location: http://www.example.com/public.php?id=links" );
?>