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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vant是一款基于Vue.js的轻量级移动端UI组件库,它提供了丰富的组件和样式,可以帮助开发者快速构建高质量的移动端应用。其中,vant中表单组件提供了表单验证功能。 在vant中,可以通过设置rules属性来实现表单验证。这个属性是一个对象,其中每个键对应一个表单项的名称,值为一个数组,表示该表单项的验证规则。例如: ``` data() { return { form: { username: '', password: '' }, rules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' }, { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' }, { min: 6, max: 15, message: '长度在 6 到 15 个字符', trigger: 'blur' } ] } }; } ``` 在上面的例子中,form对象中包含了两个表单项:username和password。而rules对象中,分别对这两个表单项设置了不同的验证规则,包括必填、长度限制等等。 除此之外,在提交表单时,还需要在form对象上调用validate方法进行整体验证。例如: ``` submitForm() { this.$refs.form.validate((valid) => { if (valid) { alert('提交成功'); } else { alert('表单验证失败'); return false; } }); } ``` 上述代码中,$refs.form指向表单组件的ref属性,validate方法会对整个表单进行验证,并通过回调函数返回验证结果。如果验证成功,则可以进行表单提交操作,否则提示用户表单验证失败。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值