Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查asp.net的在线和离线用户_C#_Asp.net_Sql Server_Video Streaming - Fatal编程技术网

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

C# 如何检查asp.net的在线和离线用户,c#,asp.net,sql-server,video-streaming,C#,Asp.net,Sql Server,Video Streaming,我正在开发一个网络电视和视频流门户,只有注册用户才能访问。现在我想检查保存在数据库中的在线/离线用户列表。用户不需要像看电视频道或视频那样在页面上移动,所以我认为最后一次活动时间不会有帮助。我需要ping mac地址或类似的东西吗? 我搜索了所有论坛,但仍然没有找到合适的解决方案 许多开发人员倾向于使用'Session\u End'事件将用户标记为“脱机”,但这可能不是一个好主意,因为ASP.Net会话和用户之间没有一对一的映射。例如,如果用户在其工作站上打开两个独立的Internet Expl

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

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

此外,
'Session\u End'
事件仅在'InProc'会话模式下可用。如果您试图在状态服务器或SQL Server中存储会话状态,“会话结束”事件,它将永远不会触发

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

在应用程序中,您可以定义一个全局字典membershipDictionary来存储有关联机和脱机用户的信息

在页面中使用
AJAX
计时器(或客户端JavaScript中的
XmlHttpRequest
)更新用户的最后访问时间,并每隔一段时间将其存储到membershipDictionary中。
不时访问dictionary Membership dictionary以过滤空闲用户(他们很长时间没有访问该页面)并检索关于有多少用户仍然在线的信息。定期维护可以在单独的线程或基于服务器的计时器中完成。请注意线程同步问题。

signar可能适合此操作

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


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

什么决定了
最后一个活动
?鼠标点击、回发等?是否会有会话超时?最后一个活动可以通过键盘、鼠标或回发来确定。但当用户点击电视频道时,他/她在未知时间内不会触发事件,但我想让他登录,因为他通过cookie记住了密码。使用SignalR跟踪用户如何?用户可以时不时地轮询集线器。@scheien您能进一步解释一下,如何使用信号器吗?您能监控流媒体流量吗?根据内容的缓冲和交付方式,您可能会估计
在线性
,正如我前面提到的,由于网站的性质,用户可能处于非活动状态或空闲状态。例如,用户可以观看一部电影或视频超过1小时,然后无需重新尝试登录即可选择其他频道。我使用了Global.asax文件,并使用了该文件的session_start和session_end功能。当我在web.config文件中提到会话超时时,它正在工作。所以问题是我不想使用会话超时,因为我上面提到的场景。用户可以通过长时间观看电影或电视频道来保持空闲。。。请帮助我如何实现它。谢谢