在ASP.NET中查找所有用户的会话状态



我使用VS2010,C#开发ASP.NET web应用程序,我在应用程序中创建了一些会话,有什么方法可以了解所有用户的会话吗?我认为这应该是可能的,因为会话是由服务器代码创建的,我想知道所有用户的会话状态,例如,我想通过查看会话["userid"]来知道我在每一时刻有多少在线用户,有什么办法吗?

感谢

无法访问所有其他用户的会话。你是允许访问您自己的会话对象,而不是其他会话对象。

但是您可以使用Application对象和其他方法来实现它。

参考:使用ASP.NET 获取活动会话数(在线用户计数器)

处理global.asax文件中的应用程序事件:

//When application start first time set onilne user to 0
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
Application("OnlineUsers") = 0
End Sub
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
Application.Lock()
Application("OnlineUsers") = CInt(Application("OnlineUsers")) + 1
Application.UnLock()
End Sub
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
Application.Lock()
Application("OnlineUsers") = CInt(Application("OnlineUsers")) - 1
Application.UnLock()
End Sub

其他实施方法参考:
获取联机用户
ASP.NET成员资格–在线显示用户列表

不能访问除您自己用户之外的所有其他用户的会话。

你还有一个会话

您可以将一些数据写入Application对象或Cache对象。

这样,无论用户是谁,您都可以从每个请求中访问它。

如果您需要访问会话,我强烈建议您使用会话状态模式作为SQLServer。http://msdn.microsoft.com/en-us/library/ms178586.aspx然后,您可以很容易地访问存储所有会话的sqlServer表。

您可以从任何地方访问所有会话状态,只需创建HttpSessionState的集合并将其保存到应用程序状态。。。当会话启动时,将其添加到集合

示例:Application("SessionCollection").Add(Session)

因此,您可以访问任何会话状态(您可以实现会话查找功能以简化任务)

你可以在你的集合中实现一个计时器,它可以检查所有会话状态并删除死的

它适用于ASP.Net 的每个版本

最新更新