我有一个带有这个参数的jQuery ajax调用:
url : "ajax/_method_",
type : 'POST' ,
data : _data_,
dataType : 'JSON',
async: true,
在我的ajax控制器中我制作了一个setAttempt& checkAttempts函数可以防止用户发出多个ajax请求 这是我的代码:
public function checkAttempts()
{
$counter = 0;
$attempts = Session::get(AJAX);
$attempts = ($attempts === false) ? [] : $attempts;
//when user make his first request => there's no ajax requests Session
if ($attempts === false)
Session::set(AJAX, []);
else
$this->setAttempt();
foreach ($attempts as $key => $attempt)
{
if (time() - intval($attempt) <= 10)
$counter++;
else
Session::destroyArray(AJAX, $key);
}
return $counter >= 5;
}
public function setAttempt()
{
return Session::setArray(AJAX, time());
}
如果我直接加入'ajax / 方法,这段代码可以正常工作 但是当我使用jquery ajax请求实用程序时,我遇到了一个问题,当用户发出第一个请求时,会话初始化为:
array (size=3)
'AJAX_ATTEMPTS' =>
array (size=4)
0 => int _timestamp_
1 => int _timestamp_
2 => int _timestamp_
3 => int _timestamp2_
如果发现当我打开另一个控制器(home-store ...)时多次调用方法ajax / checkAttempts,并且由于该方法仅在ajax控制器中声明并且仅在ajax中调用,因此不会发生这种情况__constructor
public function __construct()
{
parent::__construct(false);
if ($this->checkAttempts())
{
exit();
}
}
通过使用debug_backtrace()函数,我发现应用程序核心在初始化控制器类时调用了ajax构造函数! 如何防止这个问题?