0

我正在编写一个使用 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;
}

它第一次运行良好,但是之后,当它应该再次检查时,当然一个非常旧的时间已经保存在会话中并且仍然存在,因此可以根据用户的意愿多次调用脚本。

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

查尔斯

编辑

我的问题可能与重复-您可能在第二个答案中看到任何价值吗?

找到解决方案

这是解决方案:

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

2 回答 2

1

最简单的解决方法是覆盖时间值,如果它已设置但早于 X 秒:

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

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

于 2012-07-02T22:47:35.967 回答
0

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

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

在客户端处理问题将有助于降低服务器上的开销,同时使客户端清除用户正在做的任何松散的事情。

这个另一个问题应该有助于更详细的细节。

于 2012-07-02T23:12:47.210 回答