[英]ASP.NET MVC - Erasing session data after fer minutes of inactivity
在我的網絡應用程序中,我經常可以看到,當我幾分鍾沒有做任何事情,然后我回來,刷新頁面 - 我仍在登錄,但我的會話數據全部消失了!
在login()
操作中,我正在設置幾個Session[]
對象,這些對象是頁面正常工作所必需的。 我不知道為什么會這樣做,但我需要它在用戶清除會話數據時將其記錄下來。
我已經讀過關於設置<sessionState mode="InProc" timeout="20"/>
但是每次刷新頁面時這個超時會刷新嗎? 或者從我登錄后的20分鍾后它會用完嗎? 如果我讓這個計時器比保持在線用戶更大,該怎么辦?
發回服務器將使會話保持更長時間。 這是一個滑動過期。 有兩種方法可以從客戶端處理,客戶端不知道這20分鍾的超時:
我假設您正在使用表單身份驗證。 那是對的嗎? 如果是這樣,您需要使您的Forms身份驗證票證的超時與會話超時匹配。
用戶通過比最初看起來更復雜的過程保持登錄狀態。 Cookie存儲在用戶的瀏覽器中,稱為Forms Authentication Ticket。 如果用戶保持空閑超過會話超時限制,則服務器將丟棄該會話。 但是在下一個請求中,表單身份驗證票證將傳遞回Web服務器。 服務器驗證票證,如果它仍然有效,則用戶將重新登錄。
如您所見,用戶的會話未恢復。 如果您需要該行為,則必須檢測該條件並自行恢復會話。
解決方案是將Forms Authentication Ticket的超時設置為與Session超時相同。 您可以在Web.config文件中完成此操作, 如下所述 :
<system.web>
<authentication mode="Forms">
<forms timeout="20"/>
</authentication>
</system.web>
超時值以分鍾為單位。 一旦達到Forms Authentication Ticket的超時,用戶將被注銷。 這與會話的超時無關,但如果它們相同,則它們將在大致相同的時間到期。 如果您想要完全安全,請將Forms Authentication Ticket超時設置為略短於會話超時。 用戶將在會話超時之前注銷。 當他們再次登錄時,他們將獲得一個新的會話。 舊會議最終會自行完成。
試試這個:
問:在Proc模式下,為什么我偶爾會丟失所有會話?
答:請參閱本文“了解會話狀態模式”部分中的“穩健性”部分。
穩健性
InProc - 如果工作進程(aspnet_wp.exe)循環使用,或者appdomain重新啟動,則會話狀態將丟失。 這是因為會話狀態存儲在appdomain的內存空間中。 重啟可能是由於某些配置文件(如web.config和machine.config)的修改,或者\\ bin目錄中的任何更改(例如使用VS重新編譯應用程序后的新DLL)引起的。有關詳細信息,請參閱KB324772 。 在v1中,還有一個錯誤會導致工作進程重新啟動。 它在SP2和v1.1中修復。 見KB321792。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.