簡體   English   中英

我應該如何將我的User對象保存到會話中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM