繁体   English   中英

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

[英]Is it possible to iterate through all Sessions stored on Server in C#

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

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

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

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

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

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

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

  • 在 Session_End 事件中,获取当前 Session(this.Session)的 Session.SessionID 属性,也就是已经结束的那个。

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

一旦这个基础设施就位,并且 Dictionary 对象驻留在您的应用程序代码可以访问的位置,您就可以检索该字典并遍历它以使会话在该时间点在服务器中处于活动状态。

您可以按如下方式收集所有会话密钥。 然后使用此键访问会话值。

 var AllSessionKeyCollection = Session.Keys;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM