使用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防止重复提交,或者按钮重复点击的完整方法
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级