用户在线时间统计

wlzfoefesfsifseff 2010-07-07 04:40:55
j2ee项目怎样获得用户在线时间。

其中用户登录时间很容易获得,但登出时间可能有
如下几种情况:
1、用户点击登出按钮,正常登出,这样很容易记录登出时间。
2、用户直接关闭浏览器。
3、用户关闭浏览器相应的tab页(不同浏览器)。
4、用户长时间无操作,session过期。
5、用户直接关机。

对于上述几种情况有没有能够完全做到记录登出时间的方法。
请高手指点。
...全文
778 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
LZ的方案和我一样,这个里面必须用到Ajax,存的话必须存入到数据库里面。
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lianfeng2478 的回复:]

在页面上每隔一秒发送一次请求,然后记录时间
[/Quote]

每一秒发送,你不消耗吗。。。。
yxhhcy911 2010-07-08
  • 打赏
  • 举报
回复
1.可以用本地JS计算好时间,用户正常关闭发送时间到服务端。
2.非正常关闭检查SESSION是否关闭,来计算时间,设置SESSION过期时效,通过请求应答维持SESSION状态


这两点在用户在线的时候是不会访问数据库执行UPDATE操作的,只有当用户正常退出或者SESSION关闭的时候才会执行UPDATE
gao512008 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 superboo 的回复:]

引用 8 楼 superboo 的回复:

后台 session 超时设置 为1分钟

前台 加ajax 每隔10秒 请求后台 刷新session

这样 后台session 1分钟内 得不到刷新 就会自动 销毁 加入session监听 当销毁时 清空用户记录 统计在线时间


这样 不论用户是 关机 关闭页面 还是==== 只要 断开了 会话 1分钟后……
[/Quote] 牛
SuperBoo 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 salon122 的回复:]

引用 4 楼 wzglovejava 的回复:
在页面上进行计时,然后在用户关闭浏览器等操作时,使用Ajax将这个时间值写入数据库。

在页面上进行计时,然后在用户关闭浏览器等操作时,使用Ajax将这个时间值写入数据库。
[/Quote]
他的问题就是 怎么知道浏览器关闭

楼主 这个问题 只能用 服务器推送技术来看客户端状态了
salon122 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wzglovejava 的回复:]
在页面上进行计时,然后在用户关闭浏览器等操作时,使用Ajax将这个时间值写入数据库。
[/Quote]
在页面上进行计时,然后在用户关闭浏览器等操作时,使用Ajax将这个时间值写入数据库。
haoyuan0815 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 closewbq 的回复:]
引用 4 楼 wzglovejava 的回复:
在页面上进行计时,然后在用户关闭浏览器等操作时,使用Ajax将这个时间值写入数据库。

定时通过ajax来记录吧。也不用每秒,每5秒请求次就行。
[/Quote]
可以考虑这个!
xnx3cn 2010-07-08
  • 打赏
  • 举报
回复
用一个int记录,当用户离开后,session中发送这个int数据至服务器,
zhouxuegangjava163 2010-07-08
  • 打赏
  • 举报
回复
你好,楼主!
当浏览器关闭或者session 失效,能不能写个触发器,把当时的时间写入数据库?
个人逻辑而已。
xmy8882040810 2010-07-08
  • 打赏
  • 举报
回复
对的,肯定过段时间就需要销毁session

[Quote=引用 11 楼 wlzfoefesfsifseff 的回复:]
引用 8 楼 superboo 的回复:
只要开着浏览器 永远不会断开

这样不符合业务需求,肯定是要过了一定的时间没有操作session就要销毁,用户得重新登录。
[/Quote]
焙焙龙 2010-07-08
  • 打赏
  • 举报
回复
通常采用客户端发送心跳信号,以示其存活,当后台若干时间接收不到对应的心跳信号,则判定该用户已经下线
wlzfoefesfsifseff 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 superboo 的回复:]
只要开着浏览器 永远不会断开
[/Quote]
这样不符合业务需求,肯定是要过了一定的时间没有操作session就要销毁,用户得重新登录。
jnhcd 2010-07-08
  • 打赏
  • 举报
回复
mark
SuperBoo 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 superboo 的回复:]

后台 session 超时设置 为1分钟

前台 加ajax 每隔10秒 请求后台 刷新session

这样 后台session 1分钟内 得不到刷新 就会自动 销毁 加入session监听 当销毁时 清空用户记录 统计在线时间


这样 不论用户是 关机 关闭页面 还是==== 只要 断开了 会话 1分钟后就会 自动销毁session 只要开着浏览器 ……
[/Quote]

看清楚了 每隔 10秒 刷新session 可没让你 去 存数据库

String id = request.getSession().getId();
System.out.println("------------------session: " +id+" 刷新了----------------");

这样就行
SuperBoo 2010-07-08
  • 打赏
  • 举报
回复
后台 session 超时设置 为1分钟

前台 加ajax 每隔10秒 请求后台 刷新session

这样 后台session 1分钟内 得不到刷新 就会自动 销毁 加入session监听 当销毁时 清空用户记录 统计在线时间


这样 不论用户是 关机 关闭页面 还是==== 只要 断开了 会话 1分钟后就会 自动销毁session 只要开着浏览器 永远不会断开
wlzfoefesfsifseff 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hb308102796 的回复:]

其实还有问题,用户点击X关闭都是属于正常关闭,我想LZ现在困惑的是怎么样在不降低性能且能够在异常退出情况下记录数据的方法
[/Quote]

还有没有好的方法?

优秀APP开发 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 closewbq 的回复:]

引用 4 楼 wzglovejava 的回复:
在页面上进行计时,然后在用户关闭浏览器等操作时,使用Ajax将这个时间值写入数据库。

定时通过ajax来记录吧。也不用每秒,每5秒请求次就行。
[/Quote]
其实还有问题,用户点击X关闭都是属于正常关闭,我想LZ现在困惑的是怎么样在不降低性能且能够在异常退出情况下记录数据的方法
closewbq 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wzglovejava 的回复:]
在页面上进行计时,然后在用户关闭浏览器等操作时,使用Ajax将这个时间值写入数据库。
[/Quote]
定时通过ajax来记录吧。也不用每秒,每5秒请求次就行。
wzglovejava 2010-07-07
  • 打赏
  • 举报
回复
在页面上进行计时,然后在用户关闭浏览器等操作时,使用Ajax将这个时间值写入数据库。
Zous000888 2010-07-07
  • 打赏
  • 举报
回复
要看是做啥用的,如果不是对登出时间特别要求的话,一分钟一次请求也可以。
如果可以的话,帮我解决个问题。
http://topic.csdn.net/u/20100707/17/6745a4f8-865f-420f-b381-434c0f8ce80d.html
加载更多回复(2)

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧