是否可以在C#中迭代存储在服务器上的所有会话

时间:2012-11-06 21:04:57

标签: c# asp.net session webforms loops

我正在使用ASP.NET框架(使用C#),我为每个用户创建了Session变量。是否可以遍历已初始化的所有会话。在此迭代中,我还想更改某些会话的某些属性。

我正在尝试更改存储在会话变量中的一些数据。我有特定用户的会话ID我想要更改他们的会话,所以我还需要能够比较ID。

1 个答案:

答案 0 :(得分:0)

我不确定是否有任何用于处理此问题的框架类,但如果您确实需要遍历在IIS服务器上为每个请求创建的会话,为什么不将每个会话存储在您可以访问的自己的集合对象中你的代码? 例如,在global.asax文件中,您可以在Session_Start事件中添加自己的代码,以将特定会话保存到List。您必须检查会话是否是新会话,可以通过Session.IsNewSession属性完成。每次创建新会话时,都会触发Global.asax中的Session_Start事件。

但如果您在列表超时或结束时不从列表中删除会话,则可能会出现问题,因此我可能会这样做:

  • 在Session_Start事件中,检查this.Session.IsNewSession布尔值

  • 如果Session.IsNewSession为true,则获取当前会话(使用this.Session,因为Global.asax在其上下文中具有当前新会话),并将其保存在Dictionary对象中,其键为Session.SessionId 。

  • 这将为在服务器中创建的每个会话创建一个唯一的密钥对集合。

  • 在Session_End事件中,获取当前Session(this.Session)的Session.SessionID属性,该属性已结束。

  • 使用已完成的Session值的Session.SessionID删除包含Sessions的Dictionary中的键值对。

一旦此基础结构到位,并且Dictionary对象驻留在可由应用程序代码访问的位置,您就可以检索此字典并对其进行迭代,以便在该时间点使服务器中的会话处于活动状态。