PHP检测重定向到自我

时间:2016-04-20 10:55:58

标签: php

如果重定向是自己的话,是否有可能在php中检测到重定向?

简而言之;我可以在页面顶部添加一行或两行代码,以首先检查页面是否为重定向。如果采取行动呢?

PHP提交

的最后一行

header("Location: " . $_SERVER['REQUEST_URI']);

HTML表单

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>?submit=true" method="POST">

仍然是绿色的PHP,所以一点一点地学习。基本上我需要控制一些变量,如果页面被重定向,但仅限于。

2 个答案:

答案 0 :(得分:2)

如果您想在页面刷新时阻止表单重新提交,那么您的解决方案确实应该是将表单数据发布到保存数据的另一个页面然后使用header("Location:...)回到表格。用户将不再是明智之举,表单页面的刷新将永远不会导致重新提交。

作为奖励,这也意味着您不再需要使用PHP_SELF。作为一个额外的建议,使用"http://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']通常要好得多,因为PHP_SELF可以为浏览器/用户添加额外的数据,这可能会导致问题。

值得阅读how to defend yourself against CSRF attacks

答案 1 :(得分:2)

将此内容放入您的脚本中并查看其内容;

<pre>
<?php print_r($_SERVER); ?>
</pre>

通过这种方式,您可以找出哪些键包含什么&#39;你可以得到哪个索引有引用,并写下你的If条件

您可以使用$ _SERVER [&#39; HTTP_REFERER&#39;]来获取赞助者

if(isset($_SERVER['HTTP_REFERER'])){
    $cur_p="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']
    if($_SERVER['HTTP_REFERER']==$cur_p){
        //add your code here you want to do what if current == referer
    }
} 

但是并不总是设置HTTP_REFERER索引,所以你也可以使用像

这样的javascript
if(document.referrer == location.href){
    //add your code
}

让我知道这是否有帮助