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

Ger*_*rre 4 sql-server asp.net session session-state

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

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

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

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

小智 13

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

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

RETURN 0
Run Code Online (Sandbox Code Playgroud)


Mar*_*nHN 3

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

您还可以循环遍历每个用户的 Session 集合,并清除可能包含“旧”对象的键。也许您有一张登录票并且不想清除。

foreach (string key in Session.Keys)
{
  if (!key.Equals("login"))
  {
    Session.Remove(key);
  }
}
Run Code Online (Sandbox Code Playgroud)