首页 > 编程语言 >thinkphp正确开发系列:使用全局中间件统计当天活跃用户

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

时间:2023-05-30 09:55:21浏览次数:37  
标签:缓存 登录 中间件 用户 当天 thinkphp 全局

背景: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,这个剩余时间就是缓存标记的过期时间,然后将登录日志写入数据库,如果已经存在,代表该用户不是第一次登录,不再将登录日志写入数据库

标签:缓存,登录,中间件,用户,当天,thinkphp,全局
From: https://www.cnblogs.com/jamstack/p/17442415.html

相关文章

  • vscode 自定义代码字体颜色,局部变量、全局变量、函数、宏、属性
    vscode自定义代码字体与颜色风格在setting.json中修改即可:在这里插入图片描述"editor.semanticTokenColorCustomizations":{       "enabled":true,//enableforallthemes       "rules":{           "*.static":{             ......
  • 详解大数据中必不可少的消息中间件 kafka(3.x 新版本)
    楔子本次来聊一聊kafka,相信大家都知道它是一个应用于大数据实时领域、基于发布/订阅模式的分布式消息中间件(或者说消息队列),能够和不同的进程进行通信,从而实现上下游之间的消息传递。有了消息队列之后,上游服务和下游服务就无需直接通信了,上游服务将消息发送到队列中,下游从队列中......
  • java全局配置
    <settings><settingname="mapUnderscoreToCamelCase"value="true"/><settingname="cacheEnabled"value="true"/></settings><typeAliases><!--<typeA......
  • 普加项目管理中间件示例之三:自定义单元格样式,行样式,以及单元格内容
    通过监听处理"drawcell"事件,可以根据任务信息,设置行、单元格样式,以及自定义单元格Html内容。参考示例demo/DiyDisplay.html。代码如下:project.on("drawcell",function(e){vartask=e.record,column=e.column,field=e.field;//单元格样式if(column.name......
  • 普加项目管理中间件示例之四:自定义单元格可编辑
    通过监听处理"cellbeginedit"事件,可以控制每个行、每个单元格是否可编辑。参考示例:demo/DiyEditable.html代码如下://控制单元格是否可编辑project.on("cellbeginedit",function(e){vartask=e.record,column=e.column,field=e.field;//控制行,摘要任务不可编辑if......
  • 普加项目管理中间件示例之五:自定义条形图外观和提示信息
    可以通过监听drawitem事件来控制右侧条形图的html外观,达到任意的条形图效果。示例地址:demo/DiyDisplayGantt.html代码如下://1)自定义条形图外观显示project.on("drawitem",function(e){varitem=e.item;varleft=e.itemBox.left,top=e.itemBox.top,......
  • 普加项目管理中间件示例之六:自定义右键菜单
    弹出右键菜单时,根据当前选择的行,显示隐藏、启用禁用菜单项。示例地址:demo/DiyMenu.html代码如下://右键菜单弹出varmenu=newProjectMenu();project.setContextMenu(menu);menu.edit.on("click",function(e){ShowTaskWindow(project);});//监听菜单的opening事件,此......
  • React 全局Loading
    import{Spin}from'antd'importReactDOMfrom'react-dom/client'importtype{SpinProps}from'antd'classLoading{privatecontainer=document.createElement('div')privateroot=ReactDOM.createRoot(this.co......
  • drf——全局处理异常、接口文档、jwt介绍、based64编码与解码
    全局异常处理原理#对于前端来讲,后端即便报错,也要返回统一的格式,前端便于处理{code:999,msg:'系统异常,请联系系统管理员'}#只要三大认证,视图类的方法出了异常,都会执行一个函数: rest_framework.viewsimportexception_handler#drf只要出了异常就会执行这是drf的配置文件......
  • 在Directory.Build.props中用全局变量来管理包的版本号
    1、顶级目录下放置Directory.Build.props文件为每个软件产品,分配一块独立的windows盘符,在根目录下放置名为Directory.Build.props的文件即可。这个文件名是特定的,必须叫这个。如果公司有很多产品,引用的同一个包的版本可能是不同的,那么在磁盘根目录下就不要有Directory.Build.props......