2011-06-08 54 views
12

我使用下面的代碼創建我自己的身份驗證票據到期時間:ASP.NET驗證滑動定製票

string formsCookieStr = string.Empty; 
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
      1,        // version 
      username,      // user name 
      DateTime.Now,     // issue time 
      DateTime.Now.AddMinutes(30), // expires 
      false,       // Persistence 
      userRoleData     // user data 
    ); 
formsCookieStr = FormsAuthentication.Encrypt(ticket); 
HttpCookie FormsCookie = new HttpCookie(FormsAuthentication.FormsCookieName, formsCookieStr); 
HttpContext.Response.Cookies.Add(FormsCookie); 

我想屆滿時滑動過期 - 每個客戶端發送一個請求,那麼時間過期應重置爲30分鐘。但是,我只在用戶第一次登錄時創建票據。ASP.NET會自動爲我保留失效時間,還是需要手動執行某項操作才能實現失效期限?

回答

10

這是在web.config的forms部分配置的。滑動過期的工作方式是,對每個請求的ASP.NET引擎通過增加超時重寫身份驗證Cookie:但是

<authentication mode="Forms"> 
    <forms 
     loginUrl="~/Account/LogOn" 
     timeout="2880" 
     slidingExpiration="true" 
    /> 
</authentication> 

注意,啓用滑動過期是認爲在ASP.NET Security Practices不良做法的原因之一。

+2

謝謝。但是,當不使用自定義門票時,默認情況下是過期失效,否則無論上次請求的當前狀態如何,用戶都會註銷。我沒有觀察到這種行爲,文檔稱滑動到期是默認設置。我的自定義故障單默認情況下會過期嗎? (我在web.config中沒有slidingExpiration設置) – Journeyman 2011-06-08 08:26:28

+11

「滑動過期的工作方式是,每次請求時ASP.NET引擎都會通過增加超時來重寫身份驗證cookie」......不完全正確,因爲ASP.net只重寫如果超過一半的超時值已過,則認證票證。 http://weblogs.asp.net/rajbk/archive/2004/10/11/241080.aspx – BrazenTongue 2012-02-03 18:23:01

+0

@BrazenTongue - 該鏈接截至2017年2月已經死亡,是否可以提供替代品? – user3256944 2017-02-18 15:49:13