【问题标题】:How to clear SQL session state for all users in ASP.NET如何清除 ASP.NET 中所有用户的 SQL 会话状态
【发布时间】:2023-03-14 04:15:01
【问题描述】:

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

如果我对这些对象结构的代码进行了任何更改,并启用了新版本,任何登录的用户都会收到错误消息,因为他们的会话对象(旧版本的)与新版本的结构不匹配反序列化时需要版本。

有没有办法一次清除数据库中的所有会话,以便所有活动会话过期并强制用户再次登录(因此所有会话对象都是从头开始创建的)?

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

【问题讨论】:

  • 只是好奇 - 用户可以清除他们的 cookie 并解决这个问题吗?
  • 他们可以,但我需要一个不需要用户采取任何行动的解决方案

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


【解决方案1】:

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

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

RETURN 0

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-12-10
      • 1970-01-01
      • 2012-03-02
      • 2012-09-23
      • 2014-09-17
      • 2013-11-11
      • 2019-10-28
      • 1970-01-01
      • 2014-06-14
      相关资源
      最近更新 更多