[原創]採用Asp.Net的Forms身分識別驗證時,持久Cookie的到期時間會自動擴充

來源:互聯網
上載者:User

問題描述

之前沒有使用Forms身分識別驗證時,如果在登陸過程中把持久的Cookie到期時間設為半個小時,總會收到很多使用者的抱怨,說登陸一會就到期了。

所以總是會把Cookie到期時間設的長一些,比如兩個小時甚至一天,這樣就能保證在登陸時設定一次Cookie,使用者可以操作很長時間也不到期。

雖然也可以在每次使用者請求頁面時檢查Cookie的到期時間並自動擴充,但未免過於麻煩,不如一次設大點來的簡單。

 

偶然發現

今天在使用Forms身分識別驗證編寫《AppBox-基於ExtAspNet的企業通用管理架構》時,想當然的在Web.config中這麼設定:

<authentication mode="Forms">      <forms name=".ASPXFORMSAUTH" loginUrl="~/default.aspx" timeout="360" defaultUrl="~/main.aspx" protection="All" path="/"/></authentication>

我把到期時間設為了6個小時,以期望在登陸後的 6 個小時內不會聽到使用者的抱怨。
由於希望把使用者所屬的角色也一併儲存到User.Identity中,在查閱關於自訂的身分識別驗證時無意發現這篇文章中的一段話:

若不是持久Cookie,Cookie的有效期間Expiration屬性有目前時間加上web.config中timeout的時間,每次請求頁面時,在驗證身份過程中,會判斷是否過了有效期間的一半,要是的話更新一次cookie的有效期間

太棒了!如果真是這樣,所謂的timeout屬性根本不太重要,系統會在每次請求頁面時重新判斷到期時間,如果快到期了就自動擴充。

註:上面引用的這段話有問題,對於持久Cookie才有到期時間的說法,非持久Cookie一般也稱為會話Cookie,不能跨瀏覽器進程存在,所以關閉瀏覽器就消失了。

 

親自驗證

真正的學習和領會就需要親自動手了,下面幾個步驟會帶領我們驗證上面的說法(下面中使用的是FireFox + FireBug + FireCookie)。

1. 配置Web.config

<authentication mode="Forms">      <forms name=".ASPXFORMSAUTH" loginUrl="~/default.aspx" timeout="2" defaultUrl="~/main.aspx" protection="All" path="/"/></authentication>

我們把到期時間設為 2 分鐘,以方便觀察Cookie的到期時間。

 

2. 登陸代碼

在登陸成功的代碼中,通過下面語句程式碼完成Cookie的寫入和頁面的跳轉(第二個參數表明這是一個持久Cookie):

FormsAuthentication.RedirectFromLoginPage(userName, true);

 

3. 觀察登陸後的Cookie資訊

由於我們是在 2012-6-22 9:04:12 登陸的,所以這裡的到期時間是 2012-6-22 9:06:12

 

4. 在登陸 1 分鐘內重新整理頁面

一分鐘內重新整理頁面,Cookie的到期時間沒有變化,和一樣。

 

5. 在登陸 1 分鐘後重新整理頁面

在 9:05:13 重新整理的頁面,也就是剛剛過去 1 分鐘,系統會自動擴充Cookie到期時間,在此基礎上再增加 2 分鐘,所以現在的到期時間是 9:07:13

 

6. 在登陸 2 分鐘後重新整理頁面

兩分鐘後重新整理,Cookie到期,頁面會自動跳轉到登陸頁面。

 

總結

Asp.Net的Forms身分識別驗證不僅為我們提供了一致和安全的驗證手段, 而且這種自動擴充Cookie到期時間的機制更是錦上添花,讓我們有更多的時間關注於商務邏輯的實現。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.