使用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’]`,防止被人恶意利用。
这样就实现了简单有效的表单重复提交防护。
© 版权声明
本文刊载的所有内容,包括文字、图片、音频、视频、软件、程序、以及网页版式设计等部门来源于互联网,版权均归原作者所有!本网站提供的内容服务于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
联系信息:邮箱aoxolcom@163.com或见网站底部。
联系信息:邮箱aoxolcom@163.com或见网站底部。
THE END
请登录后发表评论
注册
社交帐号登录