我不知道还是问题所在,我的代码不会总是出错错误1 ||错误2

  <?php
 session_start();
 $token = uniqid(rand(), true);
 $_SESSION['token'] = $token;
 $_SESSION['token_time'] = time();

 ?>
  <body>
 <form id="form" name="form" method="post" action="">
   <p>Pseudo :
  <label>
   <input type="text" name="pseudo" id="pseudo" />
  </label>
 </p>
<p>E-mail :
  <label>
  <input type="text" name="email" id="email" />
 </label>
 </p>
 <p>Nom :
 <label>
  <input type="text" name="nom" id="nom" />
 </label>
 <input type="hidden" name="token" id="token" value="<?php echo $token;?>"/>
 </p>
  <p>
 <label>
   <input type="submit" name="Envoyer" id="Envoyer" value="Envoyer" />
  </label>
 </p>
</form>
</body>
</html>


我不知道还是问题所在,我的代码始终不会出错错误1 || error2
我想保护我的网站,但我不知道如何使用此Torgen,请帮助我

 <?php


session_start();

if(isset($_SESSION['token']) && isset($_SESSION['token_time']) &&
 isset($_POST['token']))
  {

 if($_SESSION['token'] == $_POST['token'])
 {

    $timestamp_ancien = time() - (15*60);
    //Si le jeton n'est pas expiré
    if($_SESSION['token_time'] >= $timestamp_ancien)
    {
        //here Instruction


     }else{echo"error3";}
    }else{echo"error2";}
    }else{echo"error1";}
  ?>

最佳答案

您尚未声明操作,这意味着表单将在同一页面上发布。
因此,对于第1点,每次请求出现在页面上时都会运行代码以生成令牌,因此令牌每次在会话中都会更改,但仍保持$ _POST中的较早值,并引发error2。
您尚未检查方法和$ _POST变量,这就是您得到error1的原因


请尝试以下:

 <?php
 session_start();
 function generate_token(){
    $token = uniqid(rand(), true);
    $_SESSION['token'] = $token;
    $_SESSION['token_time'] = time();
 }


 //avoid putting script at bottom until required
if($_SERVER['REQUEST_METHOD']=='POST' && !empty($_POST)){
if(isset($_SESSION['token']) && isset($_SESSION['token_time']) &&
 isset($_POST['token']))
  {

 if($_SESSION['token'] == $_POST['token'])
 {

    $timestamp_ancien = time() - (15*60);
    //Si le jeton n'est pas expiré
    if($_SESSION['token_time'] >= $timestamp_ancien)
    {
        //here Instruction
        generate_token();//for next call


     }else{echo"error3";}
    }else{echo"error2";}
    }else{echo"error1";}
}
generate_token();
  ?>
  <body>
 <form id="form" name="form" method="post" action="">
   <p>Pseudo :
  <label>
   <input type="text" name="pseudo" id="pseudo" />
  </label>
 </p>
<p>E-mail :
  <label>
  <input type="text" name="email" id="email" />
 </label>
 </p>
 <p>Nom :
 <label>
  <input type="text" name="nom" id="nom" />
 </label>
 <input type="hidden" name="token" id="token" value="<?php echo $_SESSION['token'];?>"/>
 </p>
  <p>
 <label>
   <input type="submit" name="Envoyer" id="Envoyer" value="Envoyer" />
  </label>
 </p>
</form>
</body>
</html>


现在发生的是,每次页面加载时都会调用您的函数,但后期数据将在较早的状态下进行比较和操作。

**如果我理解有误,请纠正我。**

09-17 03:29