84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
有一张日志表,记录着每个用户的操作日志信息,例如登录或注销,每个操作都有对应的createtime,以及当前的userName
需求如下:
统计每个用户在一天内在线时长(登录到注销这段时间,可能一天登录注销多次)
如果用户电脑直接关机,或者非正常关闭系统,这时日志表不会产生注销日志,所以将用户最后一次的操作日志(可能是增删改查)作为注销时间,进行在线时长的计算
疑问:
我觉得在日志记录的时候需要记录每次会话的sessionId,否则无法进行上面计算?
闭关修行中......
不需要记录sessionid,你想用sessionid来记录非正常退出最后一次操作时间?针对同一个用户登录的上一条数据一定是退出操作1.正常退出,下边一条一定是登录2.普通操作(增删改查)后非正常关闭,下一次也一定是登录操作
所以一次登录时间长度为本次登录时间--下次登录前一条记录的时间
但是如果用户非正常关闭后没在登录就需要单独处理,比如sessionid20分钟没操作就过期,就查看最后一条记录距离当前是否超过20分钟,超过就认为已经非正常退出。
反正得有用户标示,去判断是哪个用户的行为日志,
写日志的时候再写上每次登陆登出的时间差到日志,最后相加?
表可以这样设计
用户id 登录时间 退出时间
登录的时候,session中记录登录时间,同时把退出时间设置为:登录时间+超时时间。
用户活动的时候,根据session中记录的登录时间,去更新那条记录的退出时间为:当前时间+超时时间。
退出的时候,根据session中记录的登录时间,去更新那条记录的退出时间为:当前时间。
原始表(假设):
record_id uid name opr_type c_time 1 10 cxl land 2016-12-26 08:00:00 2 10 cxl out 2016-12-26 23:00:00
最终生成的表:
用户名 日期(asc) 当天第一次登陆时间 当天最后一次登出时间 登陆时长(结果非准确值) cxl 2016-12-26 2016-12-26 08:00:00 2016-12-26 15:00:00 3小时10分 cxl 2016-12-27 2016-12-26 08:30:00 2016-12-26 23:00:00 6小时10分
具体流程:
1. 日期分组 2. 当天第一次登陆时间 2.1 第一种情况:若当天第一条记录操作类型是 登出,那么 当天第一次登陆时间 = 00:00:01 2.2 第二种情况:若当天第一条记录操作类型是 登陆,那么 当天第一次登陆时间 = c_time 3. 当天最后一次登出时间 3.1 第一种情况:若当天最后一条记录操作类型是 登陆,那么 当天最后一次登出时间 = 23:59:59 3.2 第二种情况:若当天最后一条记录操作类型是 登出,那么 当天最后一次登出时间 = c_time 4. 登陆时长 4.1 当天最后一次登出时间 - 当天第一次登陆时间
提供下思路哈,具体实现起来个人觉得很不容易(逻辑处理需用到php,分页的时候也较麻烦,得按照日期进行分页显示,而不能像 limit 1 , 10 这样按取出的记录数进行分页 ,单sql无法得出最终表结构),所以,就只能到这儿了....
limit 1 , 10
借问题请教一下大家哈? 登陆可以记录,登出怎么记录呢? 用户不一定真的就点登出按钮啊。如果是web的话,用户可以直接关闭浏览器就不关了,怎么知道什么时候登出的呢? session吗?
不需要记录sessionid,你想用sessionid来记录非正常退出最后一次操作时间?
针对同一个用户登录的上一条数据一定是退出操作
1.正常退出,下边一条一定是登录
2.普通操作(增删改查)后非正常关闭,下一次也一定是登录操作
所以一次登录时间长度为本次登录时间--下次登录前一条记录的时间
但是如果用户非正常关闭后没在登录就需要单独处理,比如sessionid20分钟没操作就过期,就查看最后一条记录距离当前是否超过20分钟,超过就认为已经非正常退出。
反正得有用户标示,去判断是哪个用户的行为日志,
写日志的时候再写上每次登陆登出的时间差到日志,最后相加?
表可以这样设计
登录的时候,session中记录登录时间,同时把退出时间设置为:登录时间+超时时间。
用户活动的时候,根据session中记录的登录时间,去更新那条记录的退出时间为:当前时间+超时时间。
退出的时候,根据session中记录的登录时间,去更新那条记录的退出时间为:当前时间。
原始表(假设):
最终生成的表:
具体流程:
提供下思路哈,具体实现起来个人觉得很不容易(逻辑处理需用到php,分页的时候也较麻烦,得按照日期进行分页显示,而不能像
limit 1 , 10
这样按取出的记录数进行分页 ,单sql无法得出最终表结构),所以,就只能到这儿了....借问题请教一下大家哈? 登陆可以记录,登出怎么记录呢? 用户不一定真的就点登出按钮啊。如果是web的话,用户可以直接关闭浏览器就不关了,怎么知道什么时候登出的呢? session吗?