[英]Should I, and how do I, save my User object to session?
這是我的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函數已經有一段時間了。 我已經為這個項目決定采用更多的OOP方法並轉向PDO。 當我以前建立一個“安全”環境時,我會有一個登錄表單,檢查用戶是否存在(使用正確的密碼),然后將用戶ID保存在會話變量中(例如:$ _SESSION ['user_id'])和瞧。 在我的安全環境中。 我只是檢查user_id是否已設置,我是否允許他們訪問。
現在我知道這不是一個非常好的方法,我知道上面的代碼可能會有自己的問題(我希望你們為了教育目的而給我帶來地獄)。 基本上我的想法是創建一個User對象,我在構造函數中傳遞我的PDO對象。 從這個用戶我可以登錄,一旦完成所有執行,我將通過序列化類將用戶保存在會話變量中。 一旦新頁面加載,喚醒函數就會被調用,我會調用未反序列化的數據,以確保它沒有被篡改,在這種情況下,我會通過關閉isAuthenticated標志來注銷用戶(這是上面的代碼)。
題
當我嘗試序列化對象時,我收到一個錯誤,告訴我PDO對象無法序列化。 我做了一些研究,發現我必須實現__sleep方法並返回一個我想要保存的變量數組。 但是,當我醒來時,如何在用戶對象中重新初始化PDO對象? 有沒有一種方法可以在unserialize函數中添加參數,將其傳遞給我的__wakeup函數? 我完全走錯了路,需要重新考慮嗎?
你應該可以從像MyApp::getConnection()
這樣的東西中獲取你的PDO對象,並從你的__wakeup方法中調用它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.