用shiro做登录时,统计用户登录时长

本文统计用户登录时长的方法分为以下几步
1.设计用户登录日志表,里面主要的字段包含用户登录时间、用户登出时间、shiro创建的sessionId
2.登录时插入登录日志记录登录时间
3.登出时修改日志表记录登出时间(登出情况分为三种,用户点击系统提供的登出按钮、session过期以及用户直接关闭浏览器)
4.编写sql查询登录时长
补充:数据库表里之所以存储sessionId,一是因为这块没有做单点登录,同一用户可以在不同浏览器同时登录,故需要标志唯一一次会话以便修改数据库表记录。

思路有了接下来就是实现了,实现的难点主要在于监听关闭浏览器事件,前端核心代码如下:

var _beforeUnload_time=0;
var _gap_time=0;

window.addEventListener('beforeunload', e => this.beforeunloadHandler(e))
window.addEventListener('unload', e => this.unloadHandler(e))

function beforeunloadHandler(e){
        this._beforeUnload_time=new Date().getTime();
}
function unloadHandler(e){
        this._gap_time=new Date().getTime()-this._beforeUnload_time;
        //判断是窗口关闭还是刷新
        if(this._gap_time<=5){
          //如果是登录状态,关闭窗口前,调用登出接口
          //此处为调用登出接口的代码
        }
}

这个问题解决了,剩下的代码逻辑想必大家也会写了,冲冲冲!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值