我不知道还是问题所在,我的代码不会总是出错错误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>
现在发生的是,每次页面加载时都会调用您的函数,但后期数据将在较早的状态下进行比较和操作。
**如果我理解有误,请纠正我。**