PHP计时器重置为脚本调用

时间:2012-07-02 22:38:59

标签: php jquery asynchronous timer

我正在编写一个使用jQuery的异步来调用php脚本的网站。为了避免双脚本调用,我想做两件事:

  • 禁用将触发脚本调用的按钮,我已成功完成
  • 在php脚本中设置一个定时器,该脚本将检查是否由同一用户在不到一秒钟之前调用,如果是,则退出

首先我认为这相对容易,并提出以下代码:

if(!isset($_SESSION['time'])) $_SESSION['time']=time();
else if(time()-$_SESSION['time']<=1){
    //If less than one second ago, timer reset
    $_SESSION['time']=time();
    exit;
}

它第一次工作正常,但之后,当它应该再次检查时,当然会在会话中保存一个非常旧的时间并且仍在那里,因此脚本可以像用户希望的那样经常调用

您有什么想法如何解决这个问题?谢谢!

查尔斯

修改

我的问题可能是this的重复 - 你觉得第二个答案中有什么价值吗?

解决方案

这是解决方案:

if(!isset($_SESSION['time']) || ($_SESSION['time'] + 1 < time())){
    $_SESSION['time'] = time();
}else if(time()-$_SESSION['time']<=1){
    //Timer reset
    $_SESSION['time']=time();
    exit;
}

2 个答案:

答案 0 :(得分:1)

最简单的修复方法是覆盖时间值(如果已设置但超过X秒):

if(!isset($_SESSION['time']) || ($_SESSION['time'] + 30 < time())) {
    $_SESSION['time'] = time();
}

将30值更改为您想要的超时值。

答案 1 :(得分:0)

我可能会略微区别地解决问题,并中止任何不再有效的AJAX调用。

例如,假设您的用户以某种方式单击您的按钮两次,然后第二次单击可以简单地中止第一次单击的ajax请求。

在客户端处理问题将有助于降低服务器上的开销,同时使客户端消除用户正在进行的任何松散的结束。

其他question应该有助于提供更精细的细节。