thinkphp正确开发系列:使用全局中间件统计当天活跃用户

发布时间 2023-05-30 09:54:30作者: jamstack

背景:pv、uv大家应该了解,不懂得搜索一下就知道了,现在有这么一个需求:统计当天有哪些用户登录了系统,也即:同一个用户,在一天之内第一次登录系统,记为1次,一天之内的后续登录(在登录状态刷新页面)忽略,项目使用的是thinkphp 6,前后端分离架构。

 

实现方案:

我们知道,php的开发框架,如:laravel、thinkphp等,是有中间件的概念,我们这个方案就是基于中间件实现的,具体为:

第一步:定义全局中间件Test

1 在Test中间件里从$request请求里拿到登录用户的token

2 使用token获取redis缓存里的登录用户信息

3 根据用户信息拿到redis缓存里标记用户首次登录状态的key

4 获取首次登录状态key,如果不存在,代表该用户是首次登录,先保存当天首次登录的缓存标记,缓存标记的过期时间为:当天的剩余时间,公式为:当天的总秒数减去当前时间对应的秒数,举例来说:一天有86400秒,现在已经过去了30000秒,剩余时间 = 86400 - 30000,这个剩余时间就是缓存标记的过期时间,然后将登录日志写入数据库,如果已经存在,代表该用户不是第一次登录,不再将登录日志写入数据库