2013-03-17 64 views
0

我有這樣的:ASP MVC - 隨機會話超時

<membership defaultProvider="DefaultMembershipProvider" userIsOnlineTimeWindow="15"> 

這:

<sessionState mode="InProc" customProvider="DefaultSessionProvider" cookieless="UseCookies" regenerateExpiredSessionId="true" timeout="15"> 

而且我會在隨機時間超時,我可以查看網頁頁面後,然後讓註銷,可能導致什麼?

回答

1

你應該做一個區​​分ASP.NET會話之間:

<sessionState mode="InProc" customProvider="DefaultSessionProvider" cookieless="UseCookies" regenerateExpiredSessionId="true" timeout="15"> 

和窗體身份驗證:

<authentication mode="Forms"> 
    <forms loginUrl="~/account/login" timeout="2800" /> 
</authentication> 

ASP.NET會話是存儲在Web服務器的內存默認。這樣做的問題在於,您的應用程序可能隨時被Web服務器回收或取消,並且會話將會丟失。例如,如果您的服務器遇到一些CPU或內存閾值並且幾乎不在您的控制範圍內,就可能發生這種情況。如果需要以可靠的方式將某些內容存儲到ASP.NET會話中,則應確保使用的是進程外狀態(如StateServerSqlServer)。這裏有一篇關於various session state modes的文章。

另一方面,表單身份驗證用於使用Cookie跟蹤經過身份驗證的用戶。它們不會保留在服務器上,也不會受到與ASP.NET會話相同的限制。如果您決定在您的應用程序中使用ASP.NET會話,則應確保其超時時間與表單身份驗證cookie的超時時間相同,並且您使用的是超出proc持久性狀態。

+0

'timeout =「2800」'這是在幾秒鐘內?我把這個設置爲15,我認爲這是在幾分鐘內? – ojek 2013-03-17 17:10:46

+0

再一次,不要將ASP.NET會話與表單身份驗證混淆。這是兩個完全不同的東西。但是,是的,[''](http://msdn.microsoft.com/en-us/library/vstudio/1d3t3c61(v = vs.90).aspx)節點的超時屬性在幾分鐘內。並且[''](http://msdn.microsoft.com/zh-cn/library/h6bb9cz9(v = vs80).aspx)節點的'timeout'屬性也在幾分鐘內。 – 2013-03-17 17:12:12

+0

嗯,是的,我知道會話和表單身份驗證之間的區別,但是,如果我將表單身份驗證超時設置爲15,爲什麼我可以保持登錄狀態5分鐘(無活動)而不會被丟棄? – ojek 2013-03-17 17:16:40