2012-11-06 56 views
5

我使用的是ASP.NET框架(用C#)和我为每一个用户会话变量的所有会话迭代。是否有可能遍历已初始化的所有会话?在这个迭代中,我还想更改某些会话的某些属性。是否有可能通过存储服务器上的C#

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

+2

我们假设答案是“是”。接下来你需要什么?你的问题不完整。 –

+1

重复的[问题1](http://stackoverflow.com/questions/1470334/list-all-active-asp-net-sessions)或[问题2](http://stackoverflow.com/questions/8854176/GET-A-列表中,所有活跃的会话式-ASP网)。 – Candide

+0

http://weblogs.asp.net/imranbaloch/archive/2010/04/05/reading-all-users-session.aspx – Tariqulazam

回答

0

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

但有一点是问题,如果你当他们超时或结束不删除从列表中的会话,所以我怎么可能去这样做是:

  • 在在session_start事件,检查此。 Session.IsNewSession布尔值

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

  • 这将创建一个独特的密钥对集合了在服务器创建的每个会话。

  • 在Session_End中的事件,得到当前会话(this.Session),这是已经结束了一个的Session.SessionID财产。

  • 使用成品会话值以除去键值对在包含会话的词典的Session.SessionID。

一旦基础设施到位,并且字典对象驻留在其中可以通过应用程序代码访问的地方,你可以检索这本字典和遍历它来获得活跃在该服务器的会话时间点。

+0

这不起作用。登录后,来自控制器的代码会将'Session.SessionId'显示为'foo'(示例)。我循环我的静态会话列表并找到与'foo'相同的列表。但其余的属性不匹配。就像它有两个副本。 – Paul

相关问题