php会话的Jquery ajax问题

时间:2015-08-30 11:27:52

标签: javascript php jquery ajax session

我有一个带有这个参数的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构造函数! 如何防止这个问题?

0 个答案:

没有答案