【发布时间】:2012-03-23 08:03:43
【问题描述】:
我使用 VS2010、C# 开发 ASP.NET Web 应用程序,我在我的应用程序中创建了一些会话,有什么方法可以知道所有用户的会话吗?我认为这应该是可能的,因为会话是由服务器代码创建的,我想知道所有用户的会话状态,例如我想知道我在每个时刻有多少在线用户(通过查看会话 [“userid”]) ,有什么办法解决吗?
谢谢
【问题讨论】:
我使用 VS2010、C# 开发 ASP.NET Web 应用程序,我在我的应用程序中创建了一些会话,有什么方法可以知道所有用户的会话吗?我认为这应该是可能的,因为会话是由服务器代码创建的,我想知道所有用户的会话状态,例如我想知道我在每个时刻有多少在线用户(通过查看会话 [“userid”]) ,有什么办法解决吗?
谢谢
【问题讨论】:
无法访问所有其他用户的会话。你是 允许访问您自己的会话对象而不是其他人。
但您可以使用 Application 对象和其他方法来实现它。
参考:Getting number of active sessions (online users counter) with 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
其他实现方法参考:
Getting online users
ASP.NET Membership – Show list of users online
【讨论】:
您无法访问除您自己之外的所有其他用户的会话。
你也有一个会话
您可以将一些数据写入Application 对象或Cache 对象。
这样 - 您可以从每个请求中访问它 - 无论用户是谁。
【讨论】:
如果您需要访问会话,我强烈建议您使用会话状态模式作为 SQLServer。 http://msdn.microsoft.com/en-us/library/ms178586.aspx 然后,您可以非常轻松地访问存储所有会话的 sqlServer 表。
【讨论】:
您可以从任何地方访问所有会话状态,只需创建一个 HttpSessionState 集合并将其保存到应用程序状态中...当会话开始时将其添加到集合中
示例:Application("SessionCollection").Add(Session)
因此您可以访问任何会话状态(您可以实现会话查找功能来简化您的任务)
您可以在集合中实现一个计时器,该计时器将检查所有会话状态并删除无效的状态
它适用于每个版本的 ASP.Net
【讨论】: