怎么判断用户离线从而实现自动注销?给一百分.不够再加

时间:2022-01-28 14:36:38
我曾试着用一个session去保存这个会话
然后我在web.xml文件里面加入了以下:
<session-config>
  <session-timeout>30</session-timeout>
</session-config>
意思是30分钟以后,如果该会话没有发送http请求的话.
那服务器将自动视为该会话为无效.用户再次发送请求时需要进行重新登陆的.
但是我在里面也已经配置了这个文件.但并没有起作用啊.
我还试过了session.setMaxtimeinvadate(30);
还望哪能位兄弟能帮忙解决.在下感激不尽. 

19 个解决方案

#1


用一下这个方法: void setMaxInactiveInterval(int interval);
设定两次请求间隔超过多少时间此session将被取消。

#2


谢谢楼上那位:)
能具体一点吗?

#3


<session-config>
    <session-timeout>30</session-timeout>
  </session-config>
这个配置绝对可行,你详细讲讲你是什么服务器,把你的配置文件详细贴出来。

#4


<%
session.setMaxInactiveInterval(60*30);
%>
另外,提醒楼主注意结贴

#5


谢谢各位:)
上面所有方法我都有试过的.
但还是不能实现功能.
我用的是tomcat4.03服务器

#6


要想实现自动注销,你可能需要的是SessionListener(好象是这个东西,懒得查了)。在你的Session失效的时候,会调用你指定的类中的方法。

#7


哦:)
谢谢楼上那位兄弟!
那如果因为计算机死机或者断电的话那程序是根本没有办法去
实现有些方法的.那又怎么办呢?
我真的好困惑.

#8


session超时

#9


UP一下,同样等待答案。

#10


或许这个有帮助
http://www.stardeveloper.com/articles/display.html?article=2001112001&page=1

#11


好的:)
谢谢!
我看一下吧.

#12


真不好办,准确知道用户何时断线不大可能(也许是我才疏学浅),但有个折衷,
如果用户登陆后,不需要太多时间就可以再发出另一条请求的话,你可以把最大
Session时间调小一点,这样一旦用户下线,对应的session很快就会作废,这时
你的会话监听器会触发监听类,把该用户设为注销。
关于监听器的用法一两个字也说不清楚,大体时这样的:(具体类名及不太清楚了)
先写一个类实现sessionlistener(查查help文档,我手头没有)再把该类放到你的
应用程序class目录下,再到web.xml内声明该监听器类(不好意思,具体用法,你
还是查吧,我真忘了)这样一旦会话报废,服务器就会立马调用监听器内的方法注销
该用户。(具体用法用写的至少也要几页纸吧!)
你还可以和用户单独建一条连接用来交换在线信息,(前提是访问量不大),一旦连
接失败,可立即注销该用户,具体实现我不在行,提供一个思路(误导?)而已。
用loggole(好像是这么写的)搜搜session也许有所斩获。
解决后别忘了告诉大伙一声,共同提高嘛!祝好运!

#13


设计一个表,谁登录了,就把他的名字和登录时间插入表中,
开一个框架窗口,每隔5秒刷新一个这个窗口,刷新的同时,把表中的登录时间修改成新的,结果就使所有表中的登录时间,距现在的实际时间不超过5秒!
如果谁离线了,那他的刷新窗口就不再工作,时间也就不再刷新了,所以他的登录时间距现在的实际时间就会超过5秒,我们就知道他下线了,把他从表中删去,或执行注销动作就ok啦!

#14


这种办法可行,但效率明显不高。服务器负荷过重。要这么做。首先要考虑值得这么做不

#15


关注

#16


http://www.csdn.net/develop/read_article.asp?id=17767
用这里的方法,可以判断session是否有效。
另外在数据库中增加一个子段,登陆后一个状态,session失效时更新他的状态为离线。

#17


有一个最笨的办法就是:
在<body>里写个js为upload="goUrl()"
goUrl()此方法为在用户关闭此窗口时,跳转到另一个页面,而在另一个页面写程序为几句注销代码。

#18


这些方法我都有试过。
但是当session失效时并不会执行那段语句。
我用的是session事件监听方法

#19


session事件监听没有问题,我猜是你写的程序有问题

#1


用一下这个方法: void setMaxInactiveInterval(int interval);
设定两次请求间隔超过多少时间此session将被取消。

#2


谢谢楼上那位:)
能具体一点吗?

#3


<session-config>
    <session-timeout>30</session-timeout>
  </session-config>
这个配置绝对可行,你详细讲讲你是什么服务器,把你的配置文件详细贴出来。

#4


<%
session.setMaxInactiveInterval(60*30);
%>
另外,提醒楼主注意结贴

#5


谢谢各位:)
上面所有方法我都有试过的.
但还是不能实现功能.
我用的是tomcat4.03服务器

#6


要想实现自动注销,你可能需要的是SessionListener(好象是这个东西,懒得查了)。在你的Session失效的时候,会调用你指定的类中的方法。

#7


哦:)
谢谢楼上那位兄弟!
那如果因为计算机死机或者断电的话那程序是根本没有办法去
实现有些方法的.那又怎么办呢?
我真的好困惑.

#8


session超时

#9


UP一下,同样等待答案。

#10


或许这个有帮助
http://www.stardeveloper.com/articles/display.html?article=2001112001&page=1

#11


好的:)
谢谢!
我看一下吧.

#12


真不好办,准确知道用户何时断线不大可能(也许是我才疏学浅),但有个折衷,
如果用户登陆后,不需要太多时间就可以再发出另一条请求的话,你可以把最大
Session时间调小一点,这样一旦用户下线,对应的session很快就会作废,这时
你的会话监听器会触发监听类,把该用户设为注销。
关于监听器的用法一两个字也说不清楚,大体时这样的:(具体类名及不太清楚了)
先写一个类实现sessionlistener(查查help文档,我手头没有)再把该类放到你的
应用程序class目录下,再到web.xml内声明该监听器类(不好意思,具体用法,你
还是查吧,我真忘了)这样一旦会话报废,服务器就会立马调用监听器内的方法注销
该用户。(具体用法用写的至少也要几页纸吧!)
你还可以和用户单独建一条连接用来交换在线信息,(前提是访问量不大),一旦连
接失败,可立即注销该用户,具体实现我不在行,提供一个思路(误导?)而已。
用loggole(好像是这么写的)搜搜session也许有所斩获。
解决后别忘了告诉大伙一声,共同提高嘛!祝好运!

#13


设计一个表,谁登录了,就把他的名字和登录时间插入表中,
开一个框架窗口,每隔5秒刷新一个这个窗口,刷新的同时,把表中的登录时间修改成新的,结果就使所有表中的登录时间,距现在的实际时间不超过5秒!
如果谁离线了,那他的刷新窗口就不再工作,时间也就不再刷新了,所以他的登录时间距现在的实际时间就会超过5秒,我们就知道他下线了,把他从表中删去,或执行注销动作就ok啦!

#14


这种办法可行,但效率明显不高。服务器负荷过重。要这么做。首先要考虑值得这么做不

#15


关注

#16


http://www.csdn.net/develop/read_article.asp?id=17767
用这里的方法,可以判断session是否有效。
另外在数据库中增加一个子段,登陆后一个状态,session失效时更新他的状态为离线。

#17


有一个最笨的办法就是:
在<body>里写个js为upload="goUrl()"
goUrl()此方法为在用户关闭此窗口时,跳转到另一个页面,而在另一个页面写程序为几句注销代码。

#18


这些方法我都有试过。
但是当session失效时并不会执行那段语句。
我用的是session事件监听方法

#19


session事件监听没有问题,我猜是你写的程序有问题

#20