【问题标题】:ASP.NET: Is it possible to iterate through all Session objects?ASP.NET:是否可以遍历所有 Session 对象?
【发布时间】:2010-10-27 19:43:09
【问题描述】:

在 ASP.NET 3.5 中,是否可以遍历所有会话对象(不是当前会话中的对象,而是所有用户的所有会话),以便可以操作它们的集合内容(即删除一个集合项来自所有活动会话)?

如果是这样,这是否适用于 ASP.NET 状态服务(访问由共享相同状态服务的所有 Web 服务器创建的所有会话,全部来自一个 Web 服务器)?

【问题讨论】:

    标签: asp.net session collections


    【解决方案1】:

    我认为我想出的唯一答案是:如果您使用的是单个框,则可以将会话放入存储在 Application 集合中的集合中,并在每个会话结束时删除每个会话.但是为了对共享状态服务器进行全局会话更新,可以归功于 tvanfosson 在其他答案之一下的评论:除了使用通过网络套接字启用此功能的第三方或备用状态服务器之外,SQL Server 是唯一合理可行的选择.

    【讨论】:

      【解决方案2】:

      This answerquestion I asked 关于从另一个会话中删除一个会话可能对您有所帮助。我没有尝试过,您需要扩展它,但似乎可以使用反射访问所有会话的容器。

      【讨论】:

      • 该技术是否会从底层会话存储中删除项目?如果存储在那里,它是从 SQL Server 中删除它们,还是从状态服务器中删除它们?
      • 它只适用于 InProc 会话,它只在单个服务器上有用。从 SQL Server 执行此操作应该容易得多,但我实际上并没有查看架构以了解是否可以访问特定项目。我通常使用 InProc,因为我存储的空间不多,而且我的应用程序对于单个服务器来说足够小。
      • 谢谢,但您也可以将 Session 放入一个新集合中,然后将其放入 Application 集合中。我需要代表所有使用状态服务器的服务器进行更新。
      • 也许最好解释一下您要完成的工作。使用反射来挖掘会话有一种“味道”。也许最好创建一个同步服务,所有会话都会检查每个请求,看看它们是否应该对自己的集合做些什么。
      猜你喜欢
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      相关资源
      最近更新 更多