2013-07-17 77 views
5

我正在嘗試爲我的登錄表單實現「記住我」功能。大多數網站如何做到這一點?我假設當複選框被選中時,大多數網站會動態改變會話cookie的過期或最大年齡字段。如何在Express/Node.js中動態設置會話cookie的expires/maxAge?

那麼,如何根據是否選中記住我複選框來更改Cookie應該動態保存多久?

到目前爲止,我有:

if (req.body.remember) 
{ 
    var thirtyDays = 30*24*60*60*1000; 
    req.session.cookie.expires = new Date(Date.now() + thirtyDays); 
    req.session.cookie.maxAge = thirtyDays; 
} 
else 
{ 
    req.session.cookie.expires = false; 
    req.session.cookie.maxAge = false; 
} 

console.log(req.session.cookie.expires, req.session.cookie.maxAge) 

這工作。但我不能選擇而不是來記住我;由於某種原因,cookie永遠持續下去。即使在我刪除了Cookie(以鉻形式)並且未使用記住我字段進行登錄時,即使在關閉瀏覽器的會話時,它仍然會持續運行,即使它在Web檢查器的Cookie面板中顯示它是Session並且console.log正在提供我'虛假,虛假'。

我明顯在做錯事。我該如何做對?

在此先感謝! :)

編輯

看起來像上面的代碼工作,實際上。它看起來好像沒有起作用的原因是因爲我可以選擇在重新啓動Chrome時重新打開瀏覽器選項卡。這會導致Chrome永遠不會刪除瀏覽器會話Cookie,並且讓我認爲將Cookie的過期設置爲false並不會讓他們成爲瀏覽器會話Cookie。

回答

3

HTTP cookie's Expires and Max-Age directives,cookie的expires日期可以設置爲劃時代的時間(或更早版本比現在的日期)和MAXAGE以0:

req.session.cookie.expires = new Date(0); 
req.session.cookie.maxAge = 0; 
+0

而不是將它們設置爲false的? – Sam

+0

是的,cookie的過期應該是一個日期,並且maxAge是一個數字。 – yuxhuang

+1

原來,這使cookie立即過期。這不是我想要的。我希望cookie在瀏覽器會話結束後儘快過期。我爲什麼要設置這些字段? – Sam