问题记录-----表单重复提交==>利用session验证

问题记录-----表单重复提交==>利用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或者其他,这样对表单的处理比较好处理

猜你喜欢

转载自blog.csdn.net/weixin_43692259/article/details/84292922