这是我的用户类的基本结构:
class User {
private $_userId = NULL;
private $_isAuthenticated = FALSE;
private $_code = NULL;
private $_pageLoads = 1;
private $_dbh = NULL;
const SECRET = 'shhhh its a secret';
const PAGE_LOADS = 5;
const HALF_SECOND_MS = 500000;
function __construct( PDO $dbh ) {
$this->_dbh = $dbh;
}
public function login( $username, $password ) {}
public function isAuthenticated() {}
private function _authenticate( $username, $password ) {}
private function _challenge() {}
private function _generateCode() {}
private function _protectedVars() {}
function __sleep() {}
function __wakeup() {}
public function save() {
return serialize( $this );
}
}
我正在尝试做的事情的描述
我使用 PHP 内置 mysql 函数已经有一段时间了。对于这个项目,我决定采用更面向对象的方法并转向 PDO。当我过去构建一个“安全”环境时,我会有一个登录表单,检查用户是否存在(使用正确的密码),然后将用户 ID 保存在 session 变量中(比如:$_SESSION['user_id'])和瞧。在我的安全环境中。我会简单地检查是否设置了 user_id 并授予他们访问权限。
现在我知道这不是一个很好的方法,而且我知道上面的代码可能有其自身的问题(出于教育目的,我希望你们能给我下 hell )。基本上我的想法是创建一个用户对象,我将在构造函数中传递我的 PDO 对象。我可以从这个用户登录,一旦所有执行完成,我将通过序列化类将用户保存在 session 变量中。一旦加载新页面,唤醒功能就会被调用,我会调用未序列化的数据以确保它没有被篡改,在这种情况下,我会通过关闭 isAuthenticated 标志来注销用户(这就是上面的代码)。
问题
当我尝试序列化对象时,我收到一条错误消息,告诉我无法序列化 PDO 对象。我做了一些研究,发现我必须实现 __sleep 方法并返回我想要保存的变量数组。但是,当我醒来时如何重新初始化用户对象中的 PDO 对象?有没有一种方法可以向反序列化函数添加参数,并将其传递给我的 __wakeup 函数?我是否完全走错了路,需要重新考虑一下?
最佳答案
您应该能够从类似 MyApp::getConnection()
的东西中获取您的 PDO 对象,并从您的 __wakeup 方法中调用它
关于php - 我是否应该以及如何将我的用户对象保存到 session 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6931114/