PHP使用session防止表单重复提交

在测试程序功能的时候,发现表单POST数据的时候存在一个重复提交的问题,而在每个提交页面都使用验证码进行验证用户体验又不太好,查阅网上的资料后发现目前解决这个问题的方法主要有以下几种:

1、添加js验证,防止提交重复表单

2、提交后页面重定向或刷新

3、提交后,提交按钮变为不可用

4、加验证码

5、表单令牌(session)

前三种方法可以控制普通用户正常提交,却无法阻止恶意灌水性质的提交,验证码控制有时候影响用户体验,在这种情况下只有使用表单令牌了

1、 时间限制(验证码)+重定向

前台(不做时间限制的话需要):<input type=’hidden’value=”$_SESSION[‘joininToken’]” name=’token’>

如果是对提交做时间限制,前台可以不写代码

<?php

$time=60; //1分钟

If(isset($_SESSION[‘joininToken’] )){

  $tokenTime = sub_str($_SESSION[‘joininToken’],0,11);

  (time()-$tokenTime) < $time && $this->showMsg(‘提交过于频繁’);

}  

$encode = time().MD5(random(1000,99999).’DvHgR8O4’);

$_SESSION[‘joininToken’]= $encode;

提交完成后立即重定向

//如果有自己的加密函数可以加密和解密可以替换为以下代码:

$encode = xxUtils::authcode(time().xxx,‘encode’,$salt,$time)

//解密

$tokenTime = str_replace(' ','+',$this->getParam('token'));

$tokenTime = xxUtils::authcode(time().xxx,‘decode’,$salt,$time);

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值