2009-08-24 74 views
3

我使用SQLServer SessionState模式將會話存儲在我的ASP.NET應用程序中。它存儲某些在每次使用時序列化/反序列化的對象。如何清除ASP.NET中所有用戶的SQL會話狀態

如果我對這些對象的結構代碼進行了任何更改,並且將新版本直接生效,則任何記錄的用戶都將收到錯誤,因爲它們的會話對象(舊版本)不匹配新版本期望反序列化。

有沒有辦法在DB一次清除所有會話,讓所有活動會話過期,用戶不得不重新登錄(因此所有會話對象從頭開始創建)?

或者...還有其他方法可以解決這種情況嗎?

+0

只是好奇 - 可能用戶清除自己的餅乾和解決這個問題? – Tim 2014-10-29 20:24:53

+1

他們可以,但我需要一個不需要用戶操作的解決方案 – 2014-10-30 10:07:04

回答

2

可以調用Session.Abandon,或清除對每一位用戶,當他們擊中無效Session對象。

你也可以遍歷每個用戶會話的收集,並清除它可以包含「舊」對象的關鍵。也許你有一張登錄憑證,並且你不想清除。

foreach (string key in Session.Keys) 
{ 
    if (!key.Equals("login")) 
    { 
    Session.Remove(key); 
    } 
} 
13

您可以嘗試使用SQL Server存儲過程來清除所有會話:

CREATE PROCEDURE [dbo].[DeleteSessions] 
AS 
DELETE [ASPState].dbo.ASPStateTempSessions 

RETURN 0 
+0

偉大的解決方案,謝謝!但我會通過代碼處理它 – 2009-08-24 10:25:02