1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > FORM表单防止页面重复提交

FORM表单防止页面重复提交

时间:2020-09-21 14:43:37

相关推荐

FORM表单防止页面重复提交

应用场景:因为考虑系统安全以及数据准确性的问题,表单提交后应该拒绝重复提交。

分析:我们可以给页面做标记,进入表单创建页面时设置一个唯一标记值同时把这个标记值用SESSION保存起来,用户点击提交按钮时,把该标记值同时提交到后台,后台识别到该唯一标记值后,废弃该标记值,如果下次再提交该表单就会提交失败。

拓展应用:设置表单提交过期提示。

1、创建表单:设置令牌并设置到FORM表单中,随表单一起提交。

/*** 设置一个FORM表单提交令牌*/public function setFormToken(){$form_tokens= session('_form_tokens');if(!is_array($form_tokens)) $form_tokens = array();$form_token = md5(time().uniqid().rand(0, 99999999));$form_tokens[$form_token] = 1; // 标记该令牌已经使用session('_form_tokens', $form_tokens); // session存储令牌$this->assign('_form_token', $form_token); // 设置到模板文件中}

2、界面显示

<form action="" method="POST"><input type="hidden" name="_form_token" value="{$_form_token}" /></form>

3、表单提交后令牌判断以及废弃,防止重复提交

/*** 判断表单是否重复提交*/public function checkFormToken(){$form_tokens = session('_form_tokens'); // 读取session中保存的令牌$form_token= I('request._form_token', '', 'trim'); // 模板文件中提交设置的令牌if(!$form_token || !is_array($form_tokens) || !isset($form_tokens[$form_token]))$this->error('请勿重复提交表单!'); // 第一次提交可以通过,第二次提交时因为令牌已经废弃而无法提交unset($form_tokens[$form_token]); // 提交一次后就把令牌废弃,防止重复提交session('_form_tokens', $form_tokens);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。