2012-09-25 61 views
3

我已經建立了建立在這些原則(來源:http://jaspan.com/improved_persistent_login_cookie_best_practice)永久登錄應用PHP持久登錄 - 每次頁面身份驗證後都要重新發佈一個cookie嗎?

  1. 當用戶成功登錄與記住選中,登錄cookie中除了標準的會話管理的cookie發行[2]。
  2. 登錄cookie包含用戶的用戶名,系列標識符和令牌。該系列和標記是來自適當大的空間的不可猜測的隨機數。所有這三個都一起存儲在數據庫表中。
  3. 當未登錄的用戶訪問該網站並顯示登錄Cookie時,會在數據庫中查找用戶名,系列和令牌。
  4. 如果存在三元組,則認爲該用戶已通過身份驗證。使用的令牌從數據庫中刪除。生成一個新的令牌,並以用戶名和相同的系列標識符存儲在數據庫中,並向用戶發佈一個包含全部三個的新登錄cookie。
  5. 如果用戶名和系列號存在但令牌不匹配,則認爲是盜用。用戶收到措辭強烈的警告,並且用戶的所有會話都被刪除。
  6. 如果用戶名和系列不存在,則會忽略登錄cookie。

據我所知,我重新發出一個新的令牌,初始認證成功後。但是,在其他需要驗證的頁面上,我是否會重新發佈一個新的令牌?繼續檢查該持久cookie。

或者,在初始成功認證之後,我會將用戶標記爲登錄狀態,並且只有通過會話向前認證,並保存該用戶在當前嘗試訪問該站點時的初始重新發布的Cookie會話過期(即關閉瀏覽器等)?

回答

0

我會爲第二個選項投票。如果沒有別的,不斷更新auth cookie是一個性能問題。 (小,但仍然沒有必要)。登錄成功後,寫入cookie。一旦用戶在站點中,只使用會話值。

+0

這就是我想的,讓我們看看別人是否有理由以另一種方式去做。 – Huxley

0

您只在用戶嘗試訪問沒有當前會話cookie的網站時檢查登錄cookie。這就是我將如何解釋原則#3。

非登錄用戶訪問該網站並顯示一個登錄cookie, 用戶名,系列和令牌都在數據庫中查找。

(重點煤礦。)

此外,邏輯思維,也就會同時使用會話cookie和登錄cookie,如果你要在每一個檢查並重新發出登錄cookie沒有點無論如何,頁面加載。