PHP使用token防止表单重复提交的方法

使用token可以有效防止表单重复提交。基本思想是:

1. 表单加载时生成一个随机token,存入session中。

2. 表单提交时,将token作为参数提交。

3. 服务器收到表单后,先从session中取出token,然后与提交的token进行比对。

4. 如果相同,表示正常提交,可以处理业务逻辑。如果不同,表示重复提交,拒绝处理。

PHP中可以这样实现:

// 表单加载时生成token
$token = md5(uniqid(mt_rand(), true));
$_SESSION['token'] = $token;

// 表单中添加隐藏域
<input type="hidden" name="token" value="<?php echo $token; ?>">

// 处理提交数据
$token = $_REQUEST['token'];   // 提取提交的token
if ($_SESSION['token'] == $token) {
    // 正常提交
    unset($_SESSION['token']);  // 清除session中的token
    // 处理业务逻辑...
} else {
    // 重复提交
    die('Invalid submit!');  
} 

解释:

1. 表单加载时使用`uniqid()`和`mt_rand()`生成随机字符串,通过`md5()`加密得到token,存入`$_SESSION[‘token’]`。

2. 表单提交时,token的值会随表单一起提交。

3. 处理提交数据时,先从`$_REQUEST[‘token’]`获取提交的token,然后与`$_SESSION[‘token’]`比较。

4. 如果相同,表示正常提交,处理业务逻辑,并清除`$_SESSION[‘token’]`。

5. 如果不同,表示重复提交,输出错误信息,拒绝处理。

6. 为了安全,处理完成后最好清除`$_SESSION[‘token’]`,防止被人恶意利用。

这样就实现了简单有效的表单重复提交防护。

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论