2011-05-26 70 views
0

我試圖讓我的登錄()函數與'記住我'的工作。CakePHP登錄()與'記住我'導致無限循環

function login() { 
    if ($this->Auth->user()) { 
     if (!empty($this->data) && $this->data['User']['remember_me']) { 
      $cookie = array(); 
      $cookie['username'] = $this->data['User']['username']; 
      $cookie['password'] = $this->data['User']['password']; 
      $this->Cookie->write('Auth.User', $cookie, true, COOKIE_EXPIRE); 
      unset($this->data['User']['remember_me']); 
     } 

     $this->LogDetail->Write('activity','has logged IN'); 
     $this->redirect($this->Auth->redirect()); 
    } 

    if (empty($this->data)) { 
     $cookie = $this->Cookie->read('Auth.User'); 
     if (!is_null($cookie)) { 
      if ($this->Auth->login($cookie)) { 
       $this->Session->destroy('Message.Auth'); # clear auth message, just in case we use it. 
       $this->LogDetail->Write('activity','has been authenticated via cookie and is now logged IN'); 

       $this->redirect($this->Auth->redirect()); 
      } else { 
       $this->LogDetail->Write('activity','attempted to gain access with an invalid cookie'); 
       $this->Cookie->destroy('Auth.User'); # delete invalid cookie 

       $this->Session->setFlash('Invalid cookie'); 
       $this->redirect('login'); 
      } 
     } 
    } 
} 

它首先檢查是否在會話中授權用戶。

如果用戶在會話中被授權,它會將它們重定向到目標頁面。

如果因爲用戶提交了登錄表單而被授權進行會話,它會檢查是否選中了「記住我」,然後在重定向之前創建cookie。

如果用戶未在會話授權,對於存在的Auth.User的cookie,然後將函數檢查試圖Auth->登錄($ cookie中)。

這是問題發生的地方。

如果沒有會話但擁有Auth.User cookie的用戶訪問該站點,它會永久重定向,一次又一次地向日志寫入「已通過cookie進行身份驗證並且現在已登錄」,直到瀏覽器終止。

我很困惑,因爲$ this-> Auth-> login($ cookie)返回true,但SESSION沒有被更新!

Auth-> login($ cookie)如何返回true,但會話的auth信息保持未設置(導致無限循環)?

在觀看cookie的螢火蟲在無限循環中,我注意到,在此過程中

我還要提到的是,登錄系統/認證/重定向等正常工作時,沒有CakePHP的會話cookie是不斷變化的值Auth.User Cookie是目前

如果有人可以幫助我弄清楚了這一點,我將不勝感激

謝謝

回答

1

我還沒有tryed,但根據手冊,你有到autoRedirect設置爲false,像這樣:

function beforeFilter() { 
    $this->Auth->autoRedirect = false; 
} 

和會話級>刪除而不是會話級>破壞,會話級>刪除清除數據wheras會話級>滅滅會話和餅乾,並創建一個新的,這是發生了什麼,你

+0

會話 - >銷燬是問題!非常感謝 – samJL 2011-05-26 16:18:38

0

永遠保存密碼餅乾

你應該保存比保存數據庫中的所有登錄的數據MD5(用戶名)。

+1

md5?真的嗎?^^還有,爲什麼熱身一個古老而回答的問題?爲了您的信息:至少,cookie是加密的。 – mark 2012-12-27 13:52:58

+0

md5可以是任何你想要識別存儲在數據庫中的用戶信息。 – Tal 2013-01-17 12:02:02