我使用SQLServer SessionState模式将会话存储在我的ASP.NET应用程序中。它存储某些在每次使用时序列化/反序列化的对象。如何清除ASP.NET中所有用户的SQL会话状态
如果我对这些对象的结构代码进行了任何更改,并且将新版本直接生效,则任何记录的用户都将收到错误,因为它们的会话对象(旧版本)不匹配新版本期望反序列化。
有没有办法在DB一次清除所有会话,让所有活动会话过期,用户不得不重新登录(因此所有会话对象从头开始创建)?
或者...还有其他方法可以解决这种情况吗?
我使用SQLServer SessionState模式将会话存储在我的ASP.NET应用程序中。它存储某些在每次使用时序列化/反序列化的对象。如何清除ASP.NET中所有用户的SQL会话状态
如果我对这些对象的结构代码进行了任何更改,并且将新版本直接生效,则任何记录的用户都将收到错误,因为它们的会话对象(旧版本)不匹配新版本期望反序列化。
有没有办法在DB一次清除所有会话,让所有活动会话过期,用户不得不重新登录(因此所有会话对象从头开始创建)?
或者...还有其他方法可以解决这种情况吗?
可以调用Session.Abandon,或清除对每一位用户,当他们击中无效Session对象。
你也可以遍历每个用户会话的收集,并清除它可以包含“旧”对象的关键。也许你有一张登录凭证,并且你不想清除。
foreach (string key in Session.Keys)
{
if (!key.Equals("login"))
{
Session.Remove(key);
}
}
您可以尝试使用SQL Server存储过程来清除所有会话:
CREATE PROCEDURE [dbo].[DeleteSessions]
AS
DELETE [ASPState].dbo.ASPStateTempSessions
RETURN 0
伟大的解决方案,谢谢!但我会通过代码处理它 – 2009-08-24 10:25:02
只是好奇 - 可能用户清除自己的饼干和解决这个问题? – Tim 2014-10-29 20:24:53
他们可以,但我需要一个不需要用户操作的解决方案 – 2014-10-30 10:07:04