Вот базовая структура моего класса User:
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.Когда я использовал для создания «безопасной» среды, у меня была форма входа в систему, проверяйте, существует ли пользователь (с правильным паролем), а затем сохраняйте идентификатор пользователя в переменной сеанса (скажем: $ _SESSION ['user_id']) ивуаля.В моем безопасном окружении.Я бы просто проверил, был ли установлен user_id, и дал бы им доступ.
Теперь я знаю, что это не очень хороший подход, и я знаю, что приведенный выше код, вероятно, будет иметь свои собственные проблемы (которые, я надеюсь,вы, ребята, дадите мне ад за это в образовательных целях).По сути, моя идея состояла в том, чтобы создать объект User, в который я бы передавал свой объект PDO в конструкторе.От этого пользователя я мог войти в систему, и как только все выполнение было выполнено, я бы сохранил пользователя в переменной сеанса путем сериализации класса.Как только будет загружена новая страница, будет вызвана функция пробуждения, и я вызову данные, которые не были сериализованы, чтобы убедиться, что они не были подделаны, и в этом случае я выйду из системы, отключив флаг isAuthenticated (это код выше).
ВОПРОС
Когда я пытаюсь сериализовать объект, я получаю ошибку, сообщающую, что объекты PDO не могут быть сериализованы.Я провел небольшое исследование и понял, что мне нужно реализовать метод __sleep и вернуть массив переменных, которые я хотел бы сохранить.Однако когда я просыпаюсь, как мне повторно инициализировать объект PDO внутри объекта пользователя?Есть ли метод, где я могу добавить аргументы в функцию unserialize, которая передаст его моей функции __wakeup?Я совершенно не на том пути и мне нужно переосмыслить это?