在我的用戶控制器中,我試圖在登錄時將記住我的功能。當用戶訪問登錄頁面並且它存在登錄時,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。而且我確實採用了與上面不同的加密方式。
我仍然想知道爲什麼組件不工作。
問題:$ this-> appConfigurations ['remember_me']是什麼樣子的?當你回來時,你用調試($ cookie)得到什麼? – 2012-01-14 12:58:31
$ this-> appConfigurations ['remember_me'] ='+30天';如果我調試($ cookie)我得到一個正常的數組打印到屏幕上。如果我執行$ this-> Cookie->閱讀('Auth.User');在我通過$ this-> Cookie-> write()設置cookie並將其調試到屏幕後,只要我處於該函數的範圍內,就可以以正確的數組格式查看cookie數據。一旦我離開該範圍,cookie不再存在。 – brucemartin 2012-01-16 23:16:00
您的第一行不應該是$ cookie = $ this-> Cookie-> read('Auth.User'); ?你用另一個名字試過了嗎?由於Auth.User是Auth組件使用的格式,可能它可能與您的問題相關聯(我認爲不應該,但是當它不起作用時,我變得偏執狂) – 2012-01-17 01:52:03