如何清除ASP.NET中所有用户的SQL会话状态

时间:2009-08-24 09:50:32

标签: asp.net sql-server session session-state

我使用SQLServer SessionState模式在我的ASP.NET应用程序中存储会话。它存储了每次使用时序列化/反序列化的某些对象。

如果我对这些对象的结构代码进行任何更改并且我将新版本设置为实时,则任何已记录的用户都将收到错误,因为其会话对象(旧版本的)与新版本的结构不匹配版本期望在反序列化时。

有没有办法在DB中一次清除所有会话,以便所有活动会话到期,并且用户被迫再次登录(因此所有会话对象都是从头开始创建的)?

或者......有没有其他方法可以解决这种情况?

2 个答案:

答案 0 :(得分:13)

您可以尝试使用SQL Server中的存储过程清除所有会话:

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

RETURN 0

答案 1 :(得分:3)

您可以在遇到无效的Session对象时为每个用户调用Session.Abandon或Clear。

您还可以遍历每个用户的Session集合,并清除可包含“旧”对象的键。也许你有登录票,这样你就不想清除。

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