redis防重放php,通过REDIS防止重复提交数据的例子

使用Redis可以很方便的防止表单或者按钮重复提交,给动作加锁,在一定时间内不能再次执行。

//防止重复提交

$lock_nopay = ‘nopay_’.$sb_id.$sb_uid.$pay_money;

if(!$this->lock(10,$lock_nopay)){

$this->error(“当前取消打款操作尚未完成,请勿重复操作!”);

}

这里调用lock方法,锁定10秒钟,10秒钟内如果再次提交就中断操作,认为是重复提交。

lock方法是这样写的:

/**

* 锁定请求

* @param $expire 锁定时间

* @param $mark 自定义标记

* @return bool

*/

protected function lock($expire=1,$mark=”){

$url=strtolower(MODULE_NAME.’/’.ACTION_NAME);//操作地址

$prefix=’lock_’;$sid=session_id();

$key=$prefix.md5($sid.$url.$mark);//令牌键值

if(D(‘Redis’)->incr($key)==1){

return D(‘Redis’)->expire($key,$expire);

}

return false;

}

使用redis的incr自增方法,和expire缓存时间方法,判断一定时间内是否是同一个请求,如果是同一个请求返回false,这样来防止表单或按钮重复提交。

当方法执行完成,需要解除重复提交的锁定。

//解除锁定

$this->unlock($lock_nopay);

这样就是使用redis防止重复提交,或者按钮重复点击的完整方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值