我正在使用MVC pattren并在Controller类的构造中启动会话。 我的类(期望核心的一个)由spl_autoload_register()加载。 我创建一个AJAX类,它是Controller的子类,以防止用户在短时间内执行多个ajax请求我使用以下代码
class ajax extends Controller
{
public function __construct()
{
parent::__construct(false);
if ($this->checkAttempts())
exit();
}
public function checkAttempts()
{
$counter = 0;
$attempts = Session::get(AJAX);
$attempts = ($attempts === false) ? [] : $attempts;
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 methods ...
}
问题是我打开另一个控制器,如家(没有构造)
class home extends Controller {
public function index(){...}
}
脚本初始化ajax类的checkAttepmt方法中的会话,它意味着它调用的方法checkAttepmt,并且只设置会话,例如当我回显没有任何东西出现时!
当我在Home控制器中打印会话变量时,我发现ajax控制器中的会话集存在(我在每次测试中清除它们)。
我使用了这样的debug_backtrace()来解决问题
class ajax extends Controller
{
public function __construct()
{
parent::__construct(false);
$_SESSION['trace'] = debug_backtrace();
}
}
结果是
[trace] => Array
(
[0] => Array
(
[file] => D:\__path__\application\core\application.php
[line] => 24
[function] => __construct
[class] => ajax
[object] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => ajax
)
[type] => ->
[args] => Array
(
)
)
[1] => Array
(
[file] => D:\__path__\public\index.php
[line] => 15
[function] => __construct
[class] => Application
[object] => Application Object
(
[controller:protected] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => ajax
)
[method:protected] => getConfirmMsg
[params:protected] => Array
(
)
)
[type] => ->
[args] => Array
(
)
)
__PHP_Incomplete_Class和这个问题之间的关系是什么以及如何解决它?
答案 0 :(得分:0)
我发现了问题!在点击事件发生之前我已经解决了一些jQuery ajax请求我现在修复它。