2011-03-14 81 views
3

嘿, 我目前有一個神祕的問題... 我在我的網站上有一個登錄服務。 我使用學說作爲ORM。 當用戶輸入用戶名和密碼的正確組合時,我嘗試將檢索到的用戶對象存儲在會話中供以後使用。

$user = new models\User; 
$user = $em->getRepository('models\User')->findOneBy(array(
      'username' => $this->input->post('username'), 
      'password' => hash("sha512", $this->input->post('password')) 
      )); 

    if($user != NULL) { 
     session_start(); 
     $_SESSION['user'] = $user; 
    redirect('user'); 
    } 

從我登錄那一部分

 /** 
     * @ManyToOne(targetEntity="Country") 
     * @JoinColumn(name="country_id", referencedColumnName="id") 
     */ 
     private $country; 

用戶喜歡的國家不同的屬性,地址等

所以我的問題是:如果 領域的國家爲空(在分貝)爲用戶的登錄工作正常......但如果用戶被分配到一個國家(國家只是id和名稱)我的系統失敗。 重定向後沒有$用戶$ _SESSION 沒有PHP的錯誤,或者是這樣的..變量只是消失

將它也許更好只是在會話中存儲的ID和加載用戶在每個頁面上加載?

回答

5

它可能會更好只存儲在會話中的ID和加載用戶在 每頁加載?

當然。用戶數據在下一頁加載時可能已更改,因此您顯然需要刷新數據庫中的數據,而不是從會話中讀取用戶的舊數據。

引用:

PHP: Storing 'objects' inside the $_SESSION

0

除非您找到某種方式將對象的狀態與_sleep and _wakeup一起存儲並序列化而不會丟失引用,否則無法將對象放入會話中。

我的確確實實實實在在地去存儲這個id,並在下一個請求時重新檢索它。