我需要重新设计网站的后端,并需要一些帮助入门。原始网站使用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的会话变量,这不是我需要的。
任何建议或链接都会有所帮助。提前谢谢。
答案 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处理程序负责将数据发送回会话。因为我们使用单例模式,所以只能有一个实例,无论你从哪里调用它。这可确保您始终与同一用户交谈。
如果有任何不清楚的地方,或者您是否希望我进一步解释,请告诉我。