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

本文介绍了一种利用session生成token防止表单重复提交的方法,通过PHP后端和JS前端结合,有效避免了因网络延迟或误操作引起的重复提交问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值