2009-08-24 72 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