防止用户重复提交表单 - 表单令牌

伟洪winni 2017-11-23 10:33:37
表单令牌怎么弄啊?

访问表单时生成一个 token保存在session 和 表单里.
提交表单时判断表单token和session的token是否相同,并且不为空
相同的话, 表单提交成功 , 清除seesion的token
不相同的话, 表单提交失败

目前我是这样做的

//1
$_SESSION['token'] = time() . rand(1, 10000000);

//2
<input id="token" name="token" type="hidden" value="<?php echo $token ?>">

//3
if(isset($_SESSION['token']) && $_SESSION['token'] == $_POST['token']){
unset($_SESSION['token']);
//表单提交成功
}else{
//表单提交失败
}

但是如果用户在同一个浏览器打开两个表单页面的话, 前一个session会失效
代码有其他问题的话, 请大家指点下
...全文
766 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
天台的故事 2017-11-30
  • 打赏
  • 举报
回复
可以参照CI框架
红尘无爱 2017-11-26
  • 打赏
  • 举报
回复
     public function check_unqid() {
        if (!self::checkStrEquals($_SESSION['unquid'], $_POST['token'])) {
        return exit( Tool::_json_log(-3,'防跨站提交,请刷新网页重试',2));
        }
     }
红尘无爱 2017-11-26
  • 打赏
  • 举报
回复
<input type="hidden" id="token" name="token" value="{$quid}"/>
 $this->_tpl->assign('quid', $_SESSION['unquid']=$_uniqid= Tool::_unquid());


	static public function _unquid() {//生成唯一标识符
	    return sha1(uniqid(rand(),true);
	}
伟洪winni 2017-11-25
  • 打赏
  • 举报
回复
你们是怎么解决表单重复提交的?
伟洪winni 2017-11-24
  • 打赏
  • 举报
回复
谁帮我看下这个问题
hexin01 2017-11-23
  • 打赏
  • 举报
回复
你这个还是比较厉害的 我提交表单都是查询数据库是否存在这条数据 你这个不错 领教了

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧