2009-11-08 79 views
3

我想知道如何爲用戶設置一個超時,如果他們沒有做任何請求之後說10分鐘那裏會話被殺害,他們被註銷。如何超時用戶在asp.net formsAuthentication

我在webconfig這個

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" 
        protection="All" 
        timeout="20160" 
        path="/" 
        requireSSL="false" 
        slidingExpiration="false" 
        defaultUrl="default.aspx" 
        cookieless="UseDeviceProfile" 
        enableCrossAppRedirects="false" /> 
</authentication> 

有人告訴我,超時設置爲等於「20160」,因爲我想記錄在2個星期,如果他們選中了「保持登錄狀態2周」 。我也確保在我的Cookie Cookie中啓用IsPersistent。

那麼是否有另一個需要設置的超時?由於在我的網站上一段時間不活動後,它不再工作。我沒有計時,但說如果我離開並在10分鐘後回來,並嘗試在我的網站上做一些事情,比如保存一些不起作用的東西。所以它看起來像我的連接被殺死或什麼。我不得不signout,重新登錄,然後它的作品

編輯

這是如何使我的cookie

FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(version,userName,DateTime.UtcNow,DateTime.UtcNow.AddDays(14),createPersistentCookie,userData,"/"); 
      string encryptedTicket = FormsAuthentication.Encrypt(authTicket); 
      HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
      authCookie.Path = "/"; 
      if (createPersistentCookie == true) 
      { 
       authCookie.Expires = DateTime.UtcNow.AddDays(14); 
      } 
      HttpContext.Current.Response.Cookies.Add(authCookie); 

當我設置會話狀態在我的webconfig我的網址有這個在它

(S(gkvkze55zfzzee45wj34byee)) 

我寧願在我的代碼中沒有這條噁心的代碼。

+0

關於會話ID的URL,你必須在web.config中改變無Cookie =「真」「假」。通過這樣做,你將不會在URL中擁有SessionID。 – 2009-11-09 02:25:40

回答

3

另一個答案,只是爲了說明如何使用web.config中的值創建cookie,而不是在代碼中對它們進行硬編碼。

首先,考慮是否需要所有額外選項。最簡單的方法是將所有內容都設置在您的網絡中。config

FormsAuthentication.RedirectFromLoginPage("Bob", isPersistent) 

但是,如果您需要將UserData添加到故障單,則必須創建自己的。請注意我們如何使用web.config中的值而不是硬編碼值。

/// <summary> 
/// Create a New Forms Authentication Ticket when User Impersonation is active, using the current ticket as a basis for the new ticket. 
/// </summary> 
private static void NewTicket(MyUser currentUser, 
           string userData, 
           bool createPersistentCookie) 
{ 
    System.Web.Configuration.AuthenticationSection authSection = 
     (System.Web.Configuration.AuthenticationSection) 
     ConfigurationManager.GetSection("system.web/authentication"); 

    System.Web.Configuration.FormsAuthenticationConfiguration 
     formsAuthenticationSection = authSection.Forms; 

    DateTime now = DateTime.Now; 

    // see http://msdn.microsoft.com/en-us/library/kybcs83h.aspx 
    // Create a new ticket used for authentication 
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
     2,           // Ticket version 
     currentUser.UserName,      // Username to be associated with this ticket 
     now,          // Date/time issued 
     now.Add(formsAuthenticationSection.Timeout),// Date/time to expire 
     createPersistentCookie, 
     userData, 
     FormsAuthentication.FormsCookiePath); 

    // Hash the cookie for transport over the wire 
    string hash = FormsAuthentication.Encrypt(ticket); 
    HttpCookie cookie = new HttpCookie(
     FormsAuthentication.FormsCookieName, // Name of auth cookie (specified in web.config) 
     hash);         // Hashed ticket 

    // Add the cookie to the list for outbound response 
    HttpContext.Current.Response.Cookies.Add(cookie); 
} 

,如果你需要改變Ticket.UserData可以使用同樣的技術來重新創建票,而用戶已經登錄。一個例子是。發行新票時,您會增加版本號。

2

我假設你超時被會話超時,而不是驗證超時

檢查會話狀態的web.config節點所致。

<sessionState mode="InProc" 
        cookieless="true" 
        timeout="60"/> 
+0

我的webconfig中沒有會話狀態。它默認是什麼? – chobo2 2009-11-08 02:44:41

+0

「會話」在您的問題中提到。那就是我所指的屬性。 – 2009-11-08 02:49:55

+0

我並不知道會話狀態有單獨的一個。我認爲那是formAuth關心的。 – chobo2 2009-11-08 02:51:40

0

你不能讓你的窗體身份驗證票的兩個滑動和絕對過期。

查看我對this SO question的回答,以獲得有關ASP.NET中的表單認證的概述和指南的鏈接。

更新:

我怎麼設置超時,如果 他們沒有做任何要求說 10分鐘有會話被打死, 後,他們已註銷

用戶註銷=表單身份驗證,並與會話(狀態)(例如,存儲數據的地方)正交。

簡單的答案是不要在會話中存儲數據。請參閱this SO question,這看起來與您想要的類似。

+0

對不起,我不關注(或者我不認爲我是)。我沒有設置滑動失效日期。我只是有一個絕對期滿,要麼是會議結束,要麼是登錄日期的兩週。 – chobo2 2009-11-09 00:59:22

+0

我已經更新了我的答案,並提供了有關ASP.NET和會話/身份驗證的另一個答案的另一個鏈接。請閱讀參考信息,尤其是鏈接和教程視頻。 – 2009-11-09 02:22:52

+0

我現在把它放在滑動上,但它仍然不會讓我登錄2周。我不知道爲什麼。 – chobo2 2009-11-12 20:22:44

相關問題