是否可以在 C# 中遍历存储在服务器上的所有会话
Posted
技术标签:
【中文标题】是否可以在 C# 中遍历存储在服务器上的所有会话【英文标题】:Is it possible to iterate through all Sessions stored on Server in C# 【发布时间】:2012-10-26 21:35:17 【问题描述】:我正在使用 ASP.NET 框架(使用 C#)并为每个用户创建会话变量。是否可以遍历所有已初始化的会话。在本次迭代中,我还想更改某些会话的某些属性。
我正在尝试更改存储在会话变量中的一些数据。我有我想要更改其会话的特定用户的会话 ID,因此我还需要能够比较这些 ID。
【问题讨论】:
让我们假设答案是“是”。你接下来需要什么?您的问题不完整。 question 1 或 question 2 的副本。 weblogs.asp.net/imranbaloch/archive/2010/04/05/… @GeorgeStocker 问题已完成。寻找一种遍历所有会话的方法。用户在此之后想要做什么是无关紧要的。 【参考方案1】:我不确定是否有任何框架类来处理这个问题,但是如果你真的需要循环访问在 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 创建一个唯一的密钥对集合。
在Session_End事件中,获取当前已经结束的Session(this.Session)的Session.SessionID属性。
使用完成的 Session 值的 Session.SessionID 删除包含 Sessions 的 Dictionary 中的键值对。
一旦这个基础设施就位,并且 Dictionary 对象驻留在您的应用程序代码可以访问的位置,您就可以检索该字典并对其进行迭代,以便在该时间点使服务器中的会话处于活动状态。
【讨论】:
这不起作用。登录后来自控制器的代码会将Session.SessionId
显示为“foo”(示例)。我循环我的静态会话列表并找到与“foo”相同的会话。但其余属性不匹配。好像有两个副本。以上是关于是否可以在 C# 中遍历存储在服务器上的所有会话的主要内容,如果未能解决你的问题,请参考以下文章