2012-01-13 117 views
3

在我的用戶控制器中,我試圖在登錄時將記住我的功能。當用戶訪問登錄頁面並且它存在登錄時,IT似乎非常簡單地爲cookie設置cookie。但是,Cake並沒有保存cookie,至少我沒有看到,並且當我重新訪問頁面I時我不是自動登錄CakePHP不保存我的cookie

爲了驗證這一點,我有以下代碼:

$cookie=$this->read('Auth.User'); 
if(empty($cookie) and !empty($this->data)){ 
    if($this->Auth->login()) { 
     if(!empty($this->data['User']['remember_me'])){ 
      $cookie = array('id' => $this->Auth->user('id'), 
      ); 
      $expires=strtotime($this->appConfigurations['remember_me'],time()); 
      $this->Cookie->write('Auth.User', $cookie, false, $this->appConfigurations['remember_me']); 
     } 
    } 
} 

現在之後我設置此cookie我可以放置一個$這個 - > cookie->閱讀('Auth.User 「);並獲得這個cookie的價值,但它不會出現在瀏覽器(Chrome,FireFox)cookie列表中。

如果我使用普通的PHP cookies,通過setcookie(),我可以看到cookie,但當然Cake Cookie讀取不適用於這些cookie。我應該尋找什麼來解決這個問題?

我確實找到了解決辦法,但我不喜歡它,因爲它只是繞過框架。我發現了蛋糕是如何創建餅乾和這些餅乾的,我在我的代碼中使用了蛋糕餅乾創建算法,並使用setcookie()來進行設置。僅適用於任何可能需要或需要使用該工作的人:

$cookieValue=$this->Auth->user('id'); 
setcookie('CakeCookie[Auth][User]',$cookieValue,$expires,'/'); 

現在您可以使用cakes cookie組件讀取值。如果你的值是一個數組,你必須改變更多的內容,通過cookie.php代碼閱讀你需要做的事情。此外,我省略了cookie.php和應用程序設置中的加密。對於這個問題,我不需要數組值,因爲我只存儲用戶ID。而且我確實採用了與上面不同的加密方式。

我仍然想知道爲什麼組件不工作。

+0

問題:$ this-> appConfigurations ['remember_me']是什麼樣子的?當你回來時,你用調試($ cookie)得到什麼? – 2012-01-14 12:58:31

+0

$ this-> appConfigurations ['remember_me'] ='+30天';如果我調試($ cookie)我得到一個正常的數組打印到屏幕上。如果我執行$ this-> Cookie->閱讀('Auth.User');在我通過$ this-> Cookie-> write()設置cookie並將其調試到屏幕後,只要我處於該函數的範圍內,就可以以正確的數組格式查看cookie數據。一旦我離開該範圍,cookie不再存在。 – brucemartin 2012-01-16 23:16:00

+0

您的第一行不應該是$ cookie = $ this-> Cookie-> read('Auth.User'); ?你用另一個名字試過了嗎?由於Auth.User是Auth組件使用的格式,可能它可能與您的問題相關聯(我認爲不應該,但是當它不起作用時,我變得偏執狂) – 2012-01-17 01:52:03

回答

1

以下登錄動作很適合我:

function login() { 
    $cookie = $this->Cookie->read('Auth.User'); 
    debug($cookie); // Just a test 
    if ($this->Auth->user('id')) { 
     if(!empty($this->data)) { 
      $cookie = array(
       'username' => $this->data['User']['username'], 
       'password' => $this->data['User']['password'] 
      ); 
      $this->Cookie->write('Auth.User', $cookie, false, '+2 weeks'); 
     } 
     $this->redirect('/'); 
    } 
    elseif (!empty($cookie)) { 
     if ($this->Auth->login($cookie)) { 
      $this->redirect('/'); 
     } 
    } 
} 

是否在你的身邊工作?