问题记录-----表单重复提交==>利用session验证
大概方法就是利用session生成一个token做提交验证,话不多说上代码
html代码
<form id="frmsave" action="" enctype="multipart/form-data" method="POST" class="form-horizontal">
<input type="hidden" name="st" value="<?= $st ?>" />
//....其他提交的省略
</form>
php代码
if(!cc_empty($_POST))
{
session_token(1,$_POST['st']); //如果有数据提交则验证token
unset($_POST['st']); //验证通过则删除
}
else
{
$tpl=$this->tpl().'index';
$data=array(
'st'=>session_token(),//交出session生成的表单token
);
$this->view($tpl,$data);
}
/*****************************************************************/
//session令牌,防止表单重复提交
function session_token($handon=0,$handon_token=''){
if(!isset($_SESSION)){
session_start();
}
if($handon==0){
$_SESSION['token']=time();
return $_SESSION['token'];
}
else if($handon==1){
//表单提交时,如果没有token或者不等于session就die
if(!isset($_SESSION['token']) || $_SESSION['token']==null || (strcmp($_SESSION['token'], $handon_token)!=0)){
is_ajax()?send_json(1,'nothing'):die();
}
//否则置空session
$_SESSION['token']=null;
}
else{
die('非法操作');
}
}
至于前端的限制,一开始用了jq控制提交按钮去禁用,而我的二手电脑每次点提交都会卡一下,alert测试发现问题随缘出现,怀疑是电脑太卡导致jq的禁用处理太慢,于是改成了定义一个js变量为1,点击提交按钮触发+1,提交前验证是否为2,否则return false。
这里说一下提交表单尽量通过js去提交,可以用formdata或者其他,这样对表单的处理比较好处理