防止在不完整的php对象中进行会话初始化

zamenX

我正在使用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 ...
 }

问题是当我打开另一个控制器(例如home)(没有构造)时

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和此问题之间有什么关系,以及如何解决?

zamenX

我发现了问题!在单击事件发生之前触发了一些jQuery ajax请求,我现在修复了它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

类型和初始化器列表不完整

Julia中的初始化不完整

创建明确专门的模板类对象会产生“对象具有初始化但类型不完整”的错误

初始化多维数组时,编译器如何解释不完整的初始化列表?

Spring Boot&Vault:不完整的上下文初始化问题

节俭和提升-具有初始化但类型不完整

C ++编译错误:具有初始化程序,但类型不完整

PHP-在类的构造函数中初始化对象的实例,在静态成员中进行访问

“不完整”的对象实例化和输出行为

错误:变量“原始”具有初始化程序,但类型不完整。(是的,我已经搜索并阅读了类似的问题!)

CodeIgniter会话错误:脚本尝试执行方法或访问不完整对象的属性

PHP MYSQL结果不完整

PHP搜索接受不完整的输入

按给定的Javascript中不完整的顺序数组对对象数组进行排序

使用 perl 进行格式化的 Python 子进程提供不完整的输出

无效使用不完整类型进行部分模板专业化C ++

在类中将不完整类型的unique_ptr初始化为nullptr时,gcc会编译错误

带有FileInfo的ASP.NET Core序列化对象返回不完整的JSON

MVC表格后反序列化对于复杂的模型对象是不完整的

使用InterfaceType进行对象初始化

不要在不完整的对象上调用析构函数(PHP 7.1不兼容的更改)

调用静态成员的方法以在C ++中进行初始化

在活动的构造函数中进行初始化是否合适?

如何在Ubuntu中进行初始化回购?

HWadress不完整

分数不完整

使用Spring MVC在Angular JS中进行会话处理

在Swift中进行会话?是否有可能?

如何在aspnet身份中进行会话管理?