使用$ _SESSION和OOP php

时间:2015-07-13 17:47:53

标签: php oop session

我需要重新设计网站的后端,并需要一些帮助入门。原始网站使用OOP,用户登录时用于保存数据的类“用户”。根据需要在每个页面上对其进行序列化和反序列化:

// login.php
$user = new User($iduser);
// ...
// At the end of the script
$_SESSION["user"] = serialize($user);

// Another page
$user = unserialize ($_SESSION["user"]);

因此,该数据可在用户访问的每个页面上获得。另外,在(几乎)每个访问过的页面中,$ _SESSION [“user”]都会更新新数据(page_a.php很可能不会使用page_b.php需要显示的数据)。

新设计应完全面向对象。我发现的主要问题是我不知道如何在类方法中正确存储$ _SESSION [“user”]。

我尝试使用Codeigniter,但是它使用带有cookie的会话变量,这不是我需要的。

任何建议或链接都​​会有所帮助。提前谢谢。

1 个答案:

答案 0 :(得分:2)

我没有使用Codeigniter的经验,因此我无法就此提出任何具体建议。如果在此框架中有任何特定工具可用于此用例,我相信其他人会指出您正确的方向。我可以给你一些关于如何使用基本的,香草PHP强硬处理这个问题的见解。

如果你想保持简单,我建议使用某种应用程序单例(或Auth,或任何你想称之为),它可以处理像活动用户这样的静态数据。请考虑以下(非常基本和未经测试的)代码

class App {

    protected static $instance;
    public $user;

    final private __construct() {
        $user = unserialize($_SESSION['user']);
    }
    final private __clone() {}

    public static getInstance() {
        if (! self::$instance) {
            self::$instance = new static;
        }
        return self::$instance;
    }

    public function __destruct() {
        $_SESSION["user"] = serialize($this->user);
    }
}

这将允许您执行以下操作:

/* fetch the active user */
$user = App::getInstance()->user;

/* set the active user */
$app = App::getInstance();
$app->user = new User($iduser);

当您完成App对象时,destruct处理程序负责将数据发送回会话。因为我们使用单例模式,所以只能有一个实例,无论你从哪里调用它。这可确保您始终与同一用户交谈。

如果有任何不清楚的地方,或者您是否希望我进一步解释,请告诉我。