遇到的坑:在线用户统计的实现

Posted Lenny

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了遇到的坑:在线用户统计的实现相关的知识,希望对你有一定的参考价值。

我们用Redis去在存线用户的信息,当用户登陆了,我们就就往Redis写这条用户信息。
同时用户每请求一次,我们就去更新在线用户的信息,更新该用户的最后在线的时间,同时删除过期用户的信息。

这样的话,还不能实时,为了能达到实时,
我们在页面上加了一个js的定时器。每过1s(这个时间可以酌情设置)
往服务器端发送一个请求。删除过期用户,拉取当前在线的用户信息。

在这个拉取过程中,有个问题,我们发送请求的时候是带cookie的,这样的话,在服务器端会更新session的状态。
也就是session永久不会过期,这样,我们之前设计的30分钟用户过期,重新跳转到登陆页面的,功能就受到影响。

那么我们就要解决,在这次拉去过程中,更新Session。
分析代码,看到了这次请求是走的api,同时在api中 启用了session。
那么只要,这个接口调用不走这个session,就ok了。

经分析修改代码:

public override void Init()
{
this.PostAuthenticateRequest += (sender, e) =>
{
if (HttpContext.Current.Request.RawUrl.Contains("/api/SysManage/UserOnline/PostListUserByDepartment"))
{
return;
}
HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
};
base.Init();
}

 

注意 :这个地方 Session保存的地方和在线用户信息保存的是分开,做在线用户清除的比较时间一定与Session的过期时间保持一致。
这样在线统计更准确。

以上是关于遇到的坑:在线用户统计的实现的主要内容,如果未能解决你的问题,请参考以下文章

如何用ffmpeg截取视频片段&截取时间不准确的坑

监听器实现案例----自定义session扫描器和统计在线用户人数及用户信息

zoho在线文档使用小技巧

Redis集群环境下的键值空间监听事件实现方案

基于express+redis高速实现实时在线用户数统计

spring security实现在线用户统计