开发过程,遇到post重复提交问题,导致数据写入混乱。然后采用了一种方式:
(框架:TP)
在请求之前,加上表单隐藏域:__hash__不过体验度很差
在后端,
//防止表单重复提交
if(!check_token($_POST)){
$this->ajaxReturn(null,"请不要重复提交",0);
}
,这样也算解决了重复提交的问题,不过遇到同时打开多个浏览器时,hash是不同的,还是可以进行重复提交,想了想,试着用memcache锁机制写了一段简短代码,临时解决了这样的问题:
/**
* @uses 采用memcache控制重复提交
* @author jhl
*/
public function _AuthenticateRealNameMemcacheControl($user_id){
$keyname = 'AuthenticateRealNamePostControl_'.$user_id;
$lockkeyname = $keyname.'_lock';
$CacheMemcache=new CacheMemcache();
$lockkeyvalue = $CacheMemcache->get($lockkeyname);
if($lockkeyvalue == 'lock'){
$CacheMemcache->set($lockkeyname,'unlock',1);
$this->ajaxReturn(null,"请不要重复提交",0);
}elseif($lockkeyvalue == 'unlock'){
$CacheMemcache->set($lockkeyname,'lock',1);
}else{
$CacheMemcache->set($lockkeyname,'lock',1);
}
}
在进入方法引入:
//防止多个页面同时提交
$this->_AuthenticateRealNameMemcacheControl(C('userId'));
虽然通过了测试人员的测试,不过细想下,其实还是很难满足要求的,暂且这样吧,睡觉