论坛的在线时长是怎么实现的?

时间:2021-02-08 18:03:02
我在有些论坛玩时,发现它里面有提示当前用户总共的在线时长,请问这个是怎么实现的?用户登录论坛时可以把用户信息存放在session中,开始计时,但是用户推出论坛时不通过系统提供的推出按钮推出,而是采用关闭浏览器或者掉线等方式推出,如果获得用户的准确的下线时间?

39 个解决方案

#1


该回复于2015-05-26 10:44:41被管理员删除

#2


做session监听

#3


论坛访问量大,用session太占服务器资源了  ,session负荷太大了。 而且时间也不够准确啊!

#4


如果是浏览器意外的关闭.
应该只能采用session 

#5


引用 4 楼 control_net 的回复:
如果是浏览器意外的关闭. 
应该只能采用session 


是啊!那样子不是隔一个间隔检查一下用户是否在线,这样子如果访问量大的话对系统的压力也很大啊!而且这个时间间隔小的话服务器压力大,时间间隔大话的获得的在线时长就不准确了啊!

#6


用本次登陆时间和退出时间来算呢?

#7


该回复于2008-08-01 09:11:40被版主删除

#8


引用 6 楼 coolhty 的回复:
用本次登陆时间和退出时间来算呢?


恩,但是登陆时间容易获得,但是用户的退出时间如何精确获得???????????

#9


应该是做的session监听。

#10


关注中...

#11


关注中...

#12


引用 11 楼 fjhooo 的回复:
关注中...

#13


引用 9 楼 jishu_vip 的回复:
应该是做的session监听。



能不能详细点

#14


在每个页面做一个监听,让客户端的浏览器去运行,不占服务器资源,当用户session不再或者掉线,则自动发送信息到服务器,计算时长,不过我不知道怎么实现,客户端都关闭了,呵呵,楼主找找像Google一样,将很多操作转嫁给客户的IE去执行的资料,呵呵,听说Google都能利用到我们访问者的内存,不知道真的假的,太可怕了,呵呵

#15


在登陆中做文章!

#16


  呵呵  没遇见过类似的问题 
 有什么准确答案没!

#17


你可以在程序中设定session的失效时间
  request.getSession().setMaxInactiveInterval(1800);
1800是秒 

你还可以在服务器的配置里设置失效时间

#18


引用 17 楼 libo1986_728 的回复:
你可以在程序中设定session的失效时间 
  request.getSession().setMaxInactiveInterval(1800); 
1800是秒 

你还可以在服务器的配置里设置失效时间


17楼的,可是你的做法获得的在线时间并不精确,而且失效时间过于短的话,用户也会有意见的啊

#19


做session监听,我们的网站就是这样做的。 登陆的时候取时间,退出的时候也取时间,如不是正常退出,则在session失效的时候取时间。这本来就不要求很精确的时间的。 
但要考虑用户关掉ie重复登陆的情况,把所有用户登陆,登出,失效的时间都记录下来,然后一天统计一次。统计完把数据清掉。

#20


不可能精确

#21


不过出于习惯,我还是google了一下。。。。。。:   关闭ie 执行 javascript

很遗憾,ff不能执行,但是ie可以。。。。。。。

也许可以找找针对不同浏览器的文档?

<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    TODO write content
    <script language="javascript">
        //关闭窗口时自动退出
        function  window.onbeforeunload(){

            alert("dddddddddd");


        }

    </script>

  </body>
</html>

#22


这个问题我前几天还正考虑怎么做呢. 
包括  帐户和密码  只能一个人登录和一个页面打开    如果另一个页面登录的时候会剔掉另一个已经存在的帐号.
也就是说的单点登录.  关闭网页 会记录退出记录

单点登录有一些组件可以用       页面意外关闭或有意关闭的时候  怎么去捕获退出?  用SESSION  感觉不太好 也没想到好的办法

#23


引用 22 楼 xql80329 的回复:
这个问题我前几天还正考虑怎么做呢. 
包括  帐户和密码  只能一个人登录和一个页面打开    如果另一个页面登录的时候会剔掉另一个已经存在的帐号. 
也就是说的单点登录.  关闭网页 会记录退出记录 

单点登录有一些组件可以用      页面意外关闭或有意关闭的时候  怎么去捕获退出?  用SESSION  感觉不太好 也没想到好的办法


单点登录你们是用什么做的?

#24


使用Session会比较好!
定义Session的有效期啊!

#25


要精确计时间不容易,使用session监听比较方便,但误差最大是一个session失效时间
如果使用定时器刷新用户在线计时器,只能应用在小压力下,压力大了就不行了

#26


该回复于2008-09-20 12:44:09被版主删除

#27


我只用定时刷新,比如每1-2分钟刷新一次,如果有,则更新在线时间,如果超过2分钟没有更新则判定离线。

就是定时刷新。

#28


用AJAX 做的吧...本人觉得  还没看到过做这个的AJAX代码

#29


登陆时存入Aplication 然后在监听它的失效时间

#30


引用 29 楼 zcm790619 的回复:
登陆时存入Aplication 然后在监听它的失效时间


不会吧,这样一个网站资源一下子就耗尽了,不会崩溃?

#31


貌似网易是这样做的

每个页面都有一段代码定时执行一次刷新,貌似是5分钟一次。

开一个Session,如果5分钟到了没有刷新就认为用户下线了。

#32


就用session做 如果浏览器自动关闭 就利用JS监听 如果是断电 你可以设置SESSION的存活期

#33


不可以用session来做,大型网站需要考虑你用session会占用太多的资源最后导致速度下降等诸多问题。
可以用客户端自己来做
需要写一个接受客户端退出的监听线程服务单独来统计
具体的楼主可以留邮箱我发给你代码

#34


用application吧。。

#35


监听~~~~

#36


如果关闭浏览器可以用获取事件来得到正确退出时间

如果直接关机,是不可能准确得到退出时间的

服务器是通过session对客户端管理的,但session是服务器端的,

当客户端发出连接,服务器即时响应,连接断开,服务器用session暂存客户信息,但不知道客户端是否掉线.

所以服务器要有个设置session实效时间,超过这时间客户端没有连接,服务器自认为客户端断开.

#37


引用 33 楼 javahero1984 的回复:
不可以用session来做,大型网站需要考虑你用session会占用太多的资源最后导致速度下降等诸多问题。 
可以用客户端自己来做 
需要写一个接受客户端退出的监听线程服务单独来统计 
具体的楼主可以留邮箱我发给你代码


能否发一份代码参考参考
top3372@163.com

#38


引用 33 楼 javahero1984 的回复:
不可以用session来做,大型网站需要考虑你用session会占用太多的资源最后导致速度下降等诸多问题。 
可以用客户端自己来做 
需要写一个接受客户端退出的监听线程服务单独来统计 
具体的楼主可以留邮箱我发给你代码

呵呵 也给我发份吧 学习下 谢谢
xuewenjun1206@gmail.com

#39


引用 33 楼 javahero1984 的回复:
不可以用session来做,大型网站需要考虑你用session会占用太多的资源最后导致速度下降等诸多问题。 
可以用客户端自己来做 
需要写一个接受客户端退出的监听线程服务单独来统计 
具体的楼主可以留邮箱我发给你代码


jianpc@gmail.com 谢谢!

#1


该回复于2015-05-26 10:44:41被管理员删除

#2


做session监听

#3


论坛访问量大,用session太占服务器资源了  ,session负荷太大了。 而且时间也不够准确啊!

#4


如果是浏览器意外的关闭.
应该只能采用session 

#5


引用 4 楼 control_net 的回复:
如果是浏览器意外的关闭. 
应该只能采用session 


是啊!那样子不是隔一个间隔检查一下用户是否在线,这样子如果访问量大的话对系统的压力也很大啊!而且这个时间间隔小的话服务器压力大,时间间隔大话的获得的在线时长就不准确了啊!

#6


用本次登陆时间和退出时间来算呢?

#7


该回复于2008-08-01 09:11:40被版主删除

#8


引用 6 楼 coolhty 的回复:
用本次登陆时间和退出时间来算呢?


恩,但是登陆时间容易获得,但是用户的退出时间如何精确获得???????????

#9


应该是做的session监听。

#10


关注中...

#11


关注中...

#12


引用 11 楼 fjhooo 的回复:
关注中...

#13


引用 9 楼 jishu_vip 的回复:
应该是做的session监听。



能不能详细点

#14


在每个页面做一个监听,让客户端的浏览器去运行,不占服务器资源,当用户session不再或者掉线,则自动发送信息到服务器,计算时长,不过我不知道怎么实现,客户端都关闭了,呵呵,楼主找找像Google一样,将很多操作转嫁给客户的IE去执行的资料,呵呵,听说Google都能利用到我们访问者的内存,不知道真的假的,太可怕了,呵呵

#15


在登陆中做文章!

#16


  呵呵  没遇见过类似的问题 
 有什么准确答案没!

#17


你可以在程序中设定session的失效时间
  request.getSession().setMaxInactiveInterval(1800);
1800是秒 

你还可以在服务器的配置里设置失效时间

#18


引用 17 楼 libo1986_728 的回复:
你可以在程序中设定session的失效时间 
  request.getSession().setMaxInactiveInterval(1800); 
1800是秒 

你还可以在服务器的配置里设置失效时间


17楼的,可是你的做法获得的在线时间并不精确,而且失效时间过于短的话,用户也会有意见的啊

#19


做session监听,我们的网站就是这样做的。 登陆的时候取时间,退出的时候也取时间,如不是正常退出,则在session失效的时候取时间。这本来就不要求很精确的时间的。 
但要考虑用户关掉ie重复登陆的情况,把所有用户登陆,登出,失效的时间都记录下来,然后一天统计一次。统计完把数据清掉。

#20


不可能精确

#21


不过出于习惯,我还是google了一下。。。。。。:   关闭ie 执行 javascript

很遗憾,ff不能执行,但是ie可以。。。。。。。

也许可以找找针对不同浏览器的文档?

<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    TODO write content
    <script language="javascript">
        //关闭窗口时自动退出
        function  window.onbeforeunload(){

            alert("dddddddddd");


        }

    </script>

  </body>
</html>

#22


这个问题我前几天还正考虑怎么做呢. 
包括  帐户和密码  只能一个人登录和一个页面打开    如果另一个页面登录的时候会剔掉另一个已经存在的帐号.
也就是说的单点登录.  关闭网页 会记录退出记录

单点登录有一些组件可以用       页面意外关闭或有意关闭的时候  怎么去捕获退出?  用SESSION  感觉不太好 也没想到好的办法

#23


引用 22 楼 xql80329 的回复:
这个问题我前几天还正考虑怎么做呢. 
包括  帐户和密码  只能一个人登录和一个页面打开    如果另一个页面登录的时候会剔掉另一个已经存在的帐号. 
也就是说的单点登录.  关闭网页 会记录退出记录 

单点登录有一些组件可以用      页面意外关闭或有意关闭的时候  怎么去捕获退出?  用SESSION  感觉不太好 也没想到好的办法


单点登录你们是用什么做的?

#24


使用Session会比较好!
定义Session的有效期啊!

#25


要精确计时间不容易,使用session监听比较方便,但误差最大是一个session失效时间
如果使用定时器刷新用户在线计时器,只能应用在小压力下,压力大了就不行了

#26


该回复于2008-09-20 12:44:09被版主删除

#27


我只用定时刷新,比如每1-2分钟刷新一次,如果有,则更新在线时间,如果超过2分钟没有更新则判定离线。

就是定时刷新。

#28


用AJAX 做的吧...本人觉得  还没看到过做这个的AJAX代码

#29


登陆时存入Aplication 然后在监听它的失效时间

#30


引用 29 楼 zcm790619 的回复:
登陆时存入Aplication 然后在监听它的失效时间


不会吧,这样一个网站资源一下子就耗尽了,不会崩溃?

#31


貌似网易是这样做的

每个页面都有一段代码定时执行一次刷新,貌似是5分钟一次。

开一个Session,如果5分钟到了没有刷新就认为用户下线了。

#32


就用session做 如果浏览器自动关闭 就利用JS监听 如果是断电 你可以设置SESSION的存活期

#33


不可以用session来做,大型网站需要考虑你用session会占用太多的资源最后导致速度下降等诸多问题。
可以用客户端自己来做
需要写一个接受客户端退出的监听线程服务单独来统计
具体的楼主可以留邮箱我发给你代码

#34


用application吧。。

#35


监听~~~~

#36


如果关闭浏览器可以用获取事件来得到正确退出时间

如果直接关机,是不可能准确得到退出时间的

服务器是通过session对客户端管理的,但session是服务器端的,

当客户端发出连接,服务器即时响应,连接断开,服务器用session暂存客户信息,但不知道客户端是否掉线.

所以服务器要有个设置session实效时间,超过这时间客户端没有连接,服务器自认为客户端断开.

#37


引用 33 楼 javahero1984 的回复:
不可以用session来做,大型网站需要考虑你用session会占用太多的资源最后导致速度下降等诸多问题。 
可以用客户端自己来做 
需要写一个接受客户端退出的监听线程服务单独来统计 
具体的楼主可以留邮箱我发给你代码


能否发一份代码参考参考
top3372@163.com

#38


引用 33 楼 javahero1984 的回复:
不可以用session来做,大型网站需要考虑你用session会占用太多的资源最后导致速度下降等诸多问题。 
可以用客户端自己来做 
需要写一个接受客户端退出的监听线程服务单独来统计 
具体的楼主可以留邮箱我发给你代码

呵呵 也给我发份吧 学习下 谢谢
xuewenjun1206@gmail.com

#39


引用 33 楼 javahero1984 的回复:
不可以用session来做,大型网站需要考虑你用session会占用太多的资源最后导致速度下降等诸多问题。 
可以用客户端自己来做 
需要写一个接受客户端退出的监听线程服务单独来统计 
具体的楼主可以留邮箱我发给你代码


jianpc@gmail.com 谢谢!