从 class 对象访问数据还是从 PHP 中的 $_SESSION 访问数据更好?

Is it better to access data from an class object or from $_SESSION in PHP?

我正在使用 AJAXSQLPHP 编写一个示例面向对象的聊天系统来训练自己。我正在将 "sensitive" 用户数据保存到数据库中以检查各种输入和过程,例如登录、在线状态、发送的消息等。

但是,当用户登录系统时,我会检查 $_SESSION['status']true 还是 false 以授予对网站不同位置的访问权限。我用 class Login.class 检查单独文件中的数据,现在我可以决定是否保留 Login.class 的对象来接收用户信息并使用它,或者我"kill" 我将所有内容保存在 $_SESSION 变量后的对象(即 $_SESSION['username'] 等等……)。

基本上我感兴趣的是什么更安全或更好的编程,什么不是。我知道 php-login project 正在使用两种方式。这有点告诉我它们都可以,因为很多专业人士一直在实施此代码。我认为你应该坚持一种方法,还是我误解了什么?

除了实际会话内容的初始化(您已经知道,session_start() 可能应该放在您的 bootstrap 某个地方),理想情况下您应该尝试不直接使用 $_SESSION ,你为什么这么问?

因为可维护性!假设你想实现另一种形式的会话,也许你想使用 memcache 而不是平面文件会话,只使用 cookie(我说只是因为 PHP 默认将你的会话 ID 存储在 cookie 中,所以你实际上已经在使用 cookie!)

阅读起来也很方便,打字错误被忽视并导致错误的可能性很小(也许你必须经常检查管理状态,但你打错了$_SESSION['is_amdin],现在你在这里使用了 OOP(例如 Auth::isAdmin()) 你会收到关于缺少函数的致命错误)

如果您尝试保留您的东西 OO 并使用适当的 IDE,您还将获得自动完成和代码提示的额外好处,您可以 PHPDOC 一个函数,它将是被许多 IDE 用来在您编写时提供文档弹出窗口。像 $_SESSION 这样的关联数组无法为编辑或人类定义提示!