在PHP中限制直接访问

时间:2017-07-13 12:19:43

标签: php

我有一个名为form.php的表单页面,在提交时会转到step.php

现在,如果用户直接转到step.php,则应转到error.php

我尝试了一个代码,但当用户从`form.php'

重定向时,它也会转到error.php

我尝试的代码: -

<?php
    if ( $_SERVER['REQUEST_METHOD']=='GET' && realpath(__FILE__) == realpath( $_SERVER['SCRIPT_FILENAME'] ) ) {
header( 'HTTP/1.0 403 Forbidden', TRUE, 403 );
    die( header( 'location: error.php' ) );

}
?>

2 个答案:

答案 0 :(得分:0)

您可以使用会话来存储有关表单提交的信息。

放置

session_start();
$_SESSION['was_on_form'] = 1;

位于form.php的顶部,

session_start();
if (empty($_SESSION['was_on_form'])) {
     // show error or make redirect
}

在step.php的顶部

但通常不是问题,用户访问form.php之前的step.php。在step.php中,您只需验证$ _POST表单数据,如果数据有效,则可以继续。

答案 1 :(得分:0)

解决方案1 ​​

form.php的

获取要提交给step.php的按钮的名称

step.php

<?php

if(isset($_POST['btn_submit']))
{
   // button submitted
}
else{
  // button not submitted
}

?>

解决方案2

在form.php上创建一个具有唯一值的会话,并将其存储为隐藏值

form.php的

<?php
session_start();
$_SESSION['inputToken'] = rand(4 , 100); // you can generate a random string of your own rand() function is for numbers
$token = $_SESSION['inputToken'];
?>
<form>
<input type='hidden' name='_token' value='$token'/>
<input type='submit' name='btn_submit' value=''/>
</form>

step.php

<?php
session_start();
if(isset($_POST['btn_submit']) AND isset($_POST['_token']))
{
   // check token if valid

   if($_POST['_token'] == $_SESSION['inputToken'])
    {
      // submitted from the form 
    }
    else{
      // form was not submitted

      header("location:form.php?msg=1");
    }

}
else{
  // button not submitted
  header("location:form.php?msg=2");
}

?>