2014-03-04 45 views
1

我正在研究ASP.NET中的表單身份驗證,並且遇到示例代碼中的各種超時設置。在web.config本身,兩個超時被指定爲。一個是的sessionState超時= 「30」下身份驗證設置 形式loginUrl = 「的Login.aspx」 保護= 「所有」 路徑= 「/」 超時= 「60」asp.net web配置設置和安全中的超時

除了這些,在登錄頁面C#中的FormsAuthenticationTicket如下圖所示

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
         1, 
         tableObject.Rows[0]["UserName"].ToString(), 
         DateTime.Now, 
         DateTime.Now.AddMinutes(40), 
         true, 
         "AuthenticatedUser", 
         FormsAuthentication.FormsCookiePath); 

如何將這些超時實際上是工作,什麼是首選的設置,以確保該頁面保護好其他時間?

回答

2

HttpSessionState.Timeout屬性獲取和設置的時間量,以分鐘爲單位,允許將註銷在會話狀態提供者終止會話之前的請求之間。 Timeout屬性可以在使用sessionState配置元素的timeout屬性的應用程序的Web.config文件中設置,也可以使用應用程序代碼直接設置Timeout屬性值。

<configuration> 
    <system.web> 
    <sessionState 
     mode="InProc" 
     cookieless="true" 
     timeout="30" /> 
    </system.web> 
</configuration> 

無論用戶是否匿名,每次新用戶訪問該網站時都會開始會話。認證與Session很少有關係。

另一方面身份驗證超時(在身份驗證設置下)是身份驗證Cookie適用於用戶瀏覽器的時間。一旦cookie過期,他們必須重新進行身份驗證才能訪問網站上的受保護資源。

<system.web> 
    <authentication mode="Forms"> 
    <forms loginUrl="Login.aspx" 
      protection="All" 
      timeout="30" 
      name=".ASPXAUTH" 
      path="/" 
      requireSSL="false" 
      slidingExpiration="true" 
      defaultUrl="default.aspx" 
      cookieless="UseDeviceProfile" 
      enableCrossAppRedirects="false" /> 
    </authentication> 
</system.web> 

所以,如果會話超時驗證cookie之前 - 他們還在驗證,但他們所有的會話變量消失,並可能在你的網站會導致錯誤,如果你沒有在檢查空紀律等情況帶來的關於錯過會議。

如果在會話之前身份驗證超時,那麼他們的所有會話變量仍然存在,但他們將無法訪問受保護的資源,直到他們再次登錄。

如果您的會話在20分鐘後超時,您的會話變量將會丟失。但用戶可以訪問受認證保護的頁面。

如果身份驗證超時,用戶將無法訪問其保護的頁面,並且會話狀態無關緊要。

我只想補充說,在應用程序池級別的IIS中存在另一個重要的超時設置。在指定的空閒timout達到後,IIS將重新啓動池,以便使分配的資源可用。您應該確保此池閒置超時總是大於上述兩個超時值,否則無論會話或窗體超時設置爲

這樣的東西都是非常微不足道的,您會發現更多信息在MSDN上。

+0

非常感謝您的解釋。所以你說像設置超時作爲形式loginUrl =「Login.aspx」timeout =「30」並在FormsAuthenticationTicket中添加DateTime.Now.AddMinutes(40)是一樣的嗎? –

+0

@VishnuY:第一件事(loginUrl =「Login.aspx」timeout =「30」)會將login.aspx頁面的認證超時設置爲30分鐘,但是FormsAuthentication標籤是一個不同的概念。如果手動生成表單身份驗證票證,票證的超時屬性將覆蓋配置文件中設置的值。通讀這個鏈接(http://support.microsoft.com/kb/910443),我相信你會明白我在哪裏試圖得到。 – Rachit

+0

正在尋找這麼好的文章。 –

0

儘可能使用谷歌,你可以儘快學到這一點。

但是 SessionState超時用於會話時間,即會話需要多少時間。當你與FormAuthetication即時間設定在這一點上用戶登錄

FormAuthentication超時使用,當他空閒這個特定時刻

1

表單身份驗證超時僅與用戶身份驗證相關,它決定了用戶被識別並保持身份驗證的時間長度,以防缺少不活動並且會話超時通常會處理服務器上存儲的緩存數據(可以是在內存中,SqlServer等),並指出在沒有任何不活動的情況下保留用戶會話的時間。

當用戶點擊網站時,會爲用戶創建一個會話。該用戶可能是匿名或認證的。

當使用表單身份驗證(使用Cookie,假設)時,在指定的timeOut值之後,Cookie過期並且用戶不再進行身份驗證。但是,您可能已在會話中爲經過身份驗證的用戶存儲了數據,但會話數據將在達到會話超時值時從服務器中刪除。

簡單地說:根據身份驗證超時值,用戶可能會/可能不會保持身份驗證。

會話中的相同用戶的特定數據(例如背景主題)可能/可能不會保留在會話中,具體取決於會話超時值。

同樣,如果不使用身份驗證表單,仍可以將數據存儲在匿名用戶的會話中。用戶可以關閉他的瀏覽器(意味着不再檢查您的網站),當會話超時值達到時會話數據將從服務器中刪除。