2012-02-24 41 views
2

我正在使用Zend rememberMe函數實現自動登錄的記住我複選框。我在控制器內寫入了這個條件用於登錄,但我希望它在每次自動登錄時重置爲7天(只要當前登錄是自動登錄)。

$ seconds = 60 * 60 * 24 * 7; // 7天
Zend_Session :: rememberMe($秒);

是否有默認的zend函數在每次訪問期間更新cookie。順便說一句,我是新來的編碼。希望有人能幫助我。謝謝。如何在每次自動登錄時重置Zend rememberMe函數?

回答

2

您不想在每次訪問時使用Zend_Session::rememberMe()來設置cookie。造成這種情況的原因很簡單,因爲每次撥打rememberMe()都會導致生成一個新的會話ID,並將cookie替換爲具有新ID的cookie。舊會話中的數據被複制到新會話中,舊會話被刪除。

雖然沒有真正的傷害會出現這種情況,但每個請求都會有這樣的開銷。根據Zend的說法,最好的做法是在會話開始後調用它。另外,如果您對每個請求都無條件地執行此操作,則可以區分延長時間後的自動登錄和隨意瀏覽的唯一方法是將時間戳存儲在會話中,並在每個請求的開始時檢查它並設定時間限制以確定一個人已經離開。

取而代之,您可以在返回的訪問者前往您的登錄頁面登錄時執行此操作;你可以重定向他們,他們會在沒有認證的情況下登錄。

或者,如果您想定期更新會話cookie,則可以在啓動會話後在Bootstrap.php文件中調用rememberMe()。如果你從一個插件或者直接在控制器中開始會話,你應該在會話開始之後把記住我的呼叫放在那裏,並且每隔一段時間(根據你的判斷)執行一次。

請參閱session_regenerate_id()當您撥打Zend_Session::rememberMe()Zend Framework - Session Identifiers以及關於會話劫持和修復的以下部分時會被調用。

+0

zend docs說在開始會話之前調用rememberMe「在啓動會話之前使用Zend_Session :: rememberMe()來控制持續會話cookie過期之前的時間長度。」 – 2012-02-24 06:38:58

+0

正確,他們確實會說在調用之前會話開始控制cookie的到期時間。爲了澄清這種情況,因爲'rememberMe()'也調用'Zend_Sesssion :: regenerateId()',所以調用'regenerateId()'的最佳實踐是在會話啓動後調用它。在曲中,他想要經常這樣做,所以我會在會話開始之後這麼做,以便在恢復上一個問題後用新ID設置新的cookie。 – drew010 2012-02-24 16:47:25

0

你不能使用Zend_session來做到這一點。使用cookies來記住我。