sur*_*fel 1 php http-referer redirect
假设我有两页page1.php,page2.php并且我只想page2.php在它是重定向表单时显示page1.php并且我将此代码插入到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
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常,直到我有一个表单和一个提交按钮,page2.php当点击提交按钮时页面刷新,这意味着HTTP_REFERER将更改为page2.php所以我if statement失败了,它让我回到page1.php我不希望这种情况发生。有什么办法可以防止这种情况发生吗?
提前致谢。
Pet*_*jda 11
我不建议使用HTTP_REFERER:
在浏览器中操作相当简单。
某些用户可能在其浏览器中设置了安全设置,根本不发送此标头。
它无法通过HTTPS.
一些代理从请求中去除这个标头
添加 - 请参阅此问题的答案
正如 Charlotte Dunois 在评论中所说,最好在发送表单之前设置会话值,然后在第 2 页上进行检查。
page1.php:
$_SESSION[ 'display_page2' ] = TRUE;
//rest of the content
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
使用isset( $_POST[ 'some_form_input' ] ),您可以检查表单是否已发送(通过 POST 方法)。
需要时,您可以使用unset( $_SESSION[ 'display_page2' ] );或将其设置为不同的值来取消设置会话。
| 归档时间: |
|
| 查看次数: |
56140 次 |
| 最近记录: |