gpt4 book ai didi

php - 我是否应该以及如何将我的用户对象保存到 session 中?

转载 作者:可可西里 更新时间:2023-10-31 23:50:10 25 4
gpt4 key购买 nike

这是我的用户类的基本结构:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com