如何检查asp.net的在线和离线用户

时间:2013-12-12 17:56:45

标签: c# asp.net sql-server video-streaming

我正在开发一个网络电视和视频流媒体门户,只能由注册用户访问。现在我想查看保存在数据库中的在线/离线用户列表。用户不需要通过观看电视频道或视频来移动页面,因此我认为上次活动时间没有帮助。我是否需要ping mac地址或类似的东西? 我搜遍了所有的论坛,但仍未找到合适的解决方案。

2 个答案:

答案 0 :(得分:0)

许多开发人员倾向于使用‘Session_End’事件将用户标记为“离线”,但这可能不是一个好主意,因为ASP.Net会话与之间没有一对一的映射关系用户。例如,如果用户在其工作站上打开2个独立的Internet Explorer实例(例如,2个独立的IE进程),则可以打开2个ASP.Net会话。其中一个会话的‘Session_End’事件并不一定意味着用户处于离线状态,他们仍然可以使用该网站。

此外,‘Session_End’事件仅在“InProc”会话模式下可用。如果您尝试在State Server或SQL Server中存储会话状态,“Session_End”事件,它将永远不会触发。

我建议使用上次访问时间作为理想方法。 成员资格有助于构建用户数据库,有一种方便的方法可以通过Membership.GetUser(stringuserName).IsOnline.获取它 如果您不使用成员资格,您可以使用以下方法,该方法在成员资格中使用相同的原则:

在应用程序中,您可以定义全局字典membershipDictionary以在线和离线存储有关用户的信息。

在页面中使用AJAX计时器(或简称XmlHttpRequest在客户端JavaScript中)来更新用户的LastVisitTime并按间隔将其存储到membershipDictionary中。 有时,访问字典membershipDictionary以过滤掉空闲用户(他们长时间未访问该页面),并检索有多少用户仍在线的信息。可以在单独的线程或基于服务器的计时器中进行定期维护。还请注意线程同步问题。

答案 1 :(得分:0)

SignalR可能适合此操作。

您可以拥有一个所有用户都连接到的集线器,然后每个用户都会不时地调用集线器上的方法(适当的间隔将是主观的)。

您需要将每个用户加入一个组,当用户不在该时间间隔内轮询时,您将从该组中删除该用户,并将该用户标记为离线。