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

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

提问人:Borut Flis 提问时间:11/7/2012 最后编辑:Borut Flis 更新时间:6/29/2022 访问量:2164

问:

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

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

C# asp.net 会话 WebForms 循环

评论

2赞 George Stocker 11/7/2012
假设答案是“是”。你接下来需要什么?您的问题不完整。
1赞 Roland Mai 11/7/2012
问题 1问题 2 的副本。
0赞 Tariqulazam 11/7/2012
weblogs.asp.net/imranbaloch/archive/2010/04/05/......
0赞 Paul 11/14/2017
@GeorgeStocker 问题已经完成。寻找一种遍历所有会话的方法。在此之后,用户想要做什么是无关紧要的。

答:

0赞 user1682341 11/8/2012 #1

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

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

  • Session_Start事件中,请检查此内容。Session.IsNewSession 布尔值

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

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

  • Session_End事件中,获取当前 Session (this.Session),这是已结束的会话。

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

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

评论

0赞 Paul 11/14/2017
这是行不通的。登录后来自控制器的代码将显示为“foo”(示例)。我循环我的静态会话列表,并找到与“foo”相同的会话。但其余属性不匹配。就像它有两个副本一样。Session.SessionId
0赞 Jyotirmaya Das 6/29/2022 #2

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

 var AllSessionKeyCollection = Session.Keys;

评论

0赞 TZHX 7/6/2022
这似乎会查看针对当前会话存储的所有值,而不是所有用户中存在的所有会话。
0赞 Jyotirmaya Das 7/6/2022
访问所有用户存在的所有会话都会带来安全威胁,因此我认为这是无法实现的,并且可能会受到限制。