繁体   English   中英

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

[英]How to check online and offline users asp.net

我正在开发网络电视和视频流门户,只有注册用户才能访问。 现在,我要检查数据库中保存的在线/离线用户的列表。 用户不需要像看电视频道或视频那样在页面之间移动,因此我认为上一次活动时间不会有帮助。 我需要ping Mac地址还是类似的东西? 我在所有论坛中进行了搜索,但仍然找不到合适的解决方案。

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

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

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

在应用程序中,您可以定义一个全局词典MembershipDictionary来存储有关在线和离线用户的信息。

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

SignalR可能适合此操作。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM