HTTP是面向无连接的服务,即我们可以看作当浏览器向服务器请求了资源并得到了资源或发送完数据(其实请求资源也是发送数据),它们就断开连接了,直到下次需要连接(即接收或发送)时再连接,所以没有显式的动作,我们是不能判断用户是否离线(而事实上用户确实与服务器中断联系),即使是很明显的登录到某个BBS或其他系统也是如此。一般而言,友好的用户会在你所谓的“离线”时发给服务器一个信号,即通常意义的“注销”,这时服务器会把和浏览器中断已久(相对一个连接)的连接重新激活。所以我们不能判断用户的IE是否仍然打开,相反对一个BBS来说,不友好的用户关闭IE后可能并未“离线”。在浏览器和服务器交换数据的过程中,断开是常在的,连接才是偶然的,所以除非用户有明显的动作发生,否则我们是不能判断用户是否离线(这里的离线仅指用户在下次登录前不再以某种身份和服务器发生连接)。
解决方案 »
- struts2 如何实现主子表同时保存
- 关于分页
- hibernate中级联删除的问题 急求高手帮忙
- msn导入好友
- 请教一个关于在表格中,通过按钮,在当前行之上插入新行的问题
- struct中,我通过A.jsp里iframe装B.jsp的数据,我在A.jsp写了段javascript来对B.jsp里面的一些数据操作.
- SoureceID.java求教!哪位高手熟悉Liberty,SAML!!!!!!!!!
- 问一下关于读写Oracle中Clob字段的问题?
- 大家都说jsp好棒,但没有一个是用jsp做的网站?自己打自己耳光?
- 用JSP做在线人数,用application,当一用户登录到网站时,就绑定到application,并检查此时登录到网站所有用户的情况,如果已经登录到网站的用
- 大数据量转移,如何做更合理??
- 有谁有关于文件夹上传的实例
JSP里面有没有类似的方法?
jspInit()和jspDestroy()
还有怎么用session来斟听用户,来计算用户的在线时间(如果session超时了怎么算)!
谢谢!
void onBind(){//好象不是这么叫,忘记了,自己查看
//添加你的侦听代码
}
void deBind(){//好象不是这么叫,忘记了,自己查看
//添加你的侦听代码
}
} 在jsp中:
visiter v = new visiter();
session.settimeout(...)//可能拼错了
session.setAttribute("visit",v);
这时候绑定事件被触发( onBind() )
当session超时(比如用户离开1个小时后)deBind()事件被触发.你可以在这两个事件中做你需要的事.比如登记用户,注销当前用户.但是这种做法并不完美,比如在wehsphere中,不支持session超时增听.这时
你可以做一个后台监视线程,在绑定session时登记用户session , 然后由线程判断session是否超时,如果超时就注销session(session.removeattribute(...)//可能拼错了),这时deBind()会被触发.在tomcat,weblogic,iplanet中都可以使用第一种解决办法.
下面的程序是我测试通过的:/*SessionCounter.java 类文件*/package SessionCount; import javax.servlet.*;
import javax.servlet.http.*; public class SessionCounter implements HttpSessionListener { private static int activeSessions = 0; //激活的连接数/*进入连接加一*/
public void sessionCreated(HttpSessionEvent se) {
activeSessions++;
}
/*丢失连接减一*/
public void sessionDestroyed(HttpSessionEvent se) {
if(activeSessions > 0)
activeSessions--;
}
/*返回当前在线人数*/
public static int getActiveSessions() {
return activeSessions;
}
}/*web.xml配置文件,这个文件应当放在/WEB-INF下面*/<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2.3.dtd">
<web-app>
<!-- Listeners -->
<listener>
<listener-class> SessionCount.SessionCounter </listener-class>
</listener>
</web-app> /*counter.jsp 测试文件*/<jsp:useBean id="sc" class="SessionCount.SessionCounter" />
<%out.print(sc.getActiveSessions());%>OK,Enjoy everyone!
HttpSessionListener好像不能对非正常退出的用户监听,例如关闭ie??
不能监听还会叫做HttpSessionListener吗?只不过如果用户关闭IE使用这种方法当然不会立刻显示出来,这是因为服务器端的timeout设置问题,到了过期时间后,页面上才会反应出来。
请问叶三秋这个怎么实现。