使用php怎么防止页面重复提交

介绍

使用php怎么防止页面重复提交?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

php有什么用

php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及php自创新的语法,主要用来做网站开发,许多小型网站都用php开发,因为php是开源的,从而使php经得久不衰。

1,提交按钮置禁用

,,,,,当用户提交后,立即把按钮置为不可用状态。这种用js来实现。

,,,,,,,,提交前

代码如下:


,,,,,,,$ (“# submit") .attr(& # 39;残疾人# 39;& # 39;真正的# 39;);
,,,,,,,,$ (“# submit") .val(“正在提交,请稍等”),


,

,,,,,,....................................................................................

,,,执行后,把按钮置为原来状态

代码如下:


,,,,,美元(& # 39;# & # 39;提交).removeAttr(& # 39;残疾人# 39;);
,,,,,$(“#提交“).val(“确定提交“);



2,过期时间法

,,,思路:当用户提交按钮后生成一个令牌(每次业务提交令牌为唯一值)存入会话,并设置过期时间。当用户再此提交时,检测令牌是否一致且是否过期,若一致且没有过期,则认为提交了二次。当程序执行出错的时候,则需要清除存入会话的值。见下面程序

代码如下:


函数checkRepeatSubmit ($ uniqueid=& # 39; & # 39;,到期=30美元){

,,,,,,,(uniqueid=空美元uniqueid) ?Yii:应用()→→用户id。Yii:应用()→→用户名称。Yii::应用()→用户→mihome: uniqueid美元;
,,,,,,,令牌=美元md5 (“wms_check_repeat"。美元uniqueid);

,,,,,,,时间=()美元;

,,,,,,,如果(收取($ _SESSION[& # 39;标记# 39;]),,!空($ _SESSION[& # 39;标记# 39;]),,$ _SESSION[& # 39;标记# 39;]==美元令牌,,(时间- _SESSION美元[& # 39;expire_time& # 39;] & lt;到期美元)){

,,,,,,,,,,,返回false;
,,,,,,,其他}{

,,,,,,,,,,,$ _SESSION[& # 39;标记# 39;]=美元令牌;
,,,,,,,,,,,$ _SESSION [& # 39; expire_time& # 39;]=$;
,,,,,,,,,,,//会话写入的时候会等待整个页面加载完成,用此函数可以立即写入
,,,,,,,,,,,session_write_close ();
,,,,,,,,,,,返回true;
,,,,,,,}
,,,}

,//删除存入的值

,,函数cancelRepeatSubmit () {

,,,,,,,设置($ _SESSION[& # 39;标记# 39;]);
,,,,,,,设置($ _SESSION [& # 39; expire_time& # 39;]);
,,,}


3,令牌销毁法

思路:当页面进行加装的时候生成令牌,存在会话中,并写在表单里。表单提交的时候随表单提交给服务端,服务端通过会话存入的令牌与令牌进行比较,若相等,则销毁seesion中存入的令牌,当页面遭到二次提交的时候,由于存会话中入的令牌不存在而报的错。下面是代码

代码如下:


,
/* *,,,,*第二种方案
,,,,* 1,产生牌,并存在会话中
,,,,* 2,随页面生成
,,,,* 3、提交页面与会话进行比对,成功后对会话进行销毁
,,,,* 4、第二次提交则不存在这个值而报错
,,,,* @param类型美元uniqueid
,,,,* @return类型
,,,,*/
,,,函数createToken (uniqueid美元){

,,,,,,,(uniqueid=空美元uniqueid) ?Yii:应用()→→用户id。Yii:应用()→→用户名称。Yii::应用()→用户→mihome: uniqueid美元;
,,,,,,,令牌=美元md5 (“wms_check2_repeat"。美元uniqueid);
,,,,,,,$ _SESSION [& # 39; form_token& # 39;]=美元令牌;

,,,,,,session_write_close ();


,,,,,,,返回$令牌;
,,,}

,,,函数checkToken(美元令牌){

,,,,,,,如果(!收取($ _SESSION [& # 39; form_token& # 39;]) | |空($ _SESSION [& # 39; form_token& # 39;]) | | $ _SESSION [& # 39; form_token& # 39;] !=$令牌){
,,,,,,,,,,,返回false;
,,,,,,,其他}{
,,,,,,,,,,,设置($ _SESSION [& # 39; form_token& # 39;]);
,,,,,,,,,,,返回true;
,,,,,,,}
,,,null

使用php怎么防止页面重复提交