提问人:Borut Flis 提问时间:11/7/2012 最后编辑:Borut Flis 更新时间:6/29/2022 访问量:2164
是否可以在 C 中遍历存储在服务器上的所有会话#
Is it possible to iterate through all Sessions stored on Server in C#
问:
我正在使用 ASP.NET 框架(带有 C#),并为每个用户制作会话变量。是否可以遍历所有已初始化的会话。在此迭代中,我还想更改某些会话的某些属性。
我正在尝试更改存储在会话变量中的某些数据。我有要更改其会话的特定用户的会话 ID,因此我还需要能够比较这些 ID。
答:
我不确定是否有任何框架类可以处理此问题,但是如果您确实需要遍历在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 对象驻留在应用程序代码可以访问的位置,就可以检索此字典并循环访问它,以使会话在该时间点在服务器中处于活动状态。
评论
Session.SessionId
您可以按如下方式收集所有会话密钥。然后使用此键访问会话值。
var AllSessionKeyCollection = Session.Keys;
评论