具体做法:
第一步:
所有在开发工程中在common的JSP页里的<head></head>块中写入这样一个JAVASCRIPT函数
<script language="javascript">
removeOnline(){
if(event.clientX<0&&event.clientY<0)
{
document.write('<iframe width="100" height="100" src="rs.jsp"></iframe><OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>');
document.all.WebBrowser.ExecWB(45,1);
}
}
</script>
第二步:
在html的<body></body>中写入<body onUnload="removeOnline();"></body>(此处一定要注意大小写)
解释:
一、
if(event.clientX<0&&event.clientY<0)
{
}
用于判断IE是被刷新还是被close
如果是刷新( refresh按钮)
event.clinetX与event.clientY一定是大于0的
二、
document.write('<iframe width="100" height="100" src="rs.jsp"></iframe><OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>');
document.all.WebBrowser.ExecWB(45,1);
这是在IE里创建一个IE本身自带的控件,控件名为WebBrowser
此处代码的作用是
在本页创建一个IFRAME,在iframe里套一个叫rs.jsp的文件,rs.jsp文件内容如下:
<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Insert title here</title>
</head>
<body>
<%session.invalidate();%>
</body>
</html>
然后当IFRAME加载完rs.jsp后立刻调用
document.all.WebBrowser.ExecWB(45,1);
强制IE关闭,IE关闭时通常会有一个提示框,需要用户点“YES”或“NO”,因此document.all.WebBrowser.ExecWB(45,1);这句话的作用就是强制IE关闭并且不显示该提示框而直接关闭
因此这样在IE被关闭之前session.invalidate()就被触发,session.invalidate被触发时会自动调用工程中已经有的sessioncounter.java这个类中的logout方法,于是logout事件一定是在IE被关闭前正常执行的
sesssioncounter.java内容如下:
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.log4j.Logger;
public class SessionCounter implements HttpSessionListener {
private static int activeSessions = 0;
Logger log=Logger.getLogger(SessionCounter.class.getName());
public void sessionCreated(HttpSessionEvent se) {
HttpSession session=null;
try{
session=se.getSession();
session.setMaxInactiveInterval(15*60);
log.info("session time start now");
}catch(Exception ex){
System.out.println("Session set error:"+ex);
ex.printStackTrace();
}
//System.out.println(SysDateAndTime.getSystemDateTime()+"session created");
}
public void sessionDestroyed(HttpSessionEvent se) {
//destroy()事件中应该做的一些东西可以包括大家自己的一些退出时该执行的企业流程等
}
//public static int getActiveSessions() {
//return activeSessions;
//}
}
为了布署这个sessioncounter.java需要在web.xml中加入
<listener>
<listener-class>
com.ecc.util.SessionCounter
</listener-class>
</listener>
其它工程也依据些设置,可以保证IE被关闭时logout事件被正常触发
分享到:
相关推荐
jsp课程中内置对象session,jsp教程中的上课源代码
jsp中session使用方法
JSP乱码 N种解决方案
jsp设计事例jsp usebean session
jsp中session的详解文档资料
解决uploadify上传火狐浏览器下丢失session Flash上传丢失session
主要介绍了jsp中存取session值简单介绍,涉及request和session的域操作等相关内容,具有一定参考价值,需要的朋友可以了解下。
详细讲解JSP中session的使用,看了就知道。
JSP 在servlet中使用session 猜数字
JSP乱码解决方案大家可以看看,可以有利于大家,在JSP页面乱码问题,扥到更好的解决方案
讨论了JSP中出现中文问题的起源,并着重从编码角度解释了出现乱码的原因,最后给出了一套整体的中文问题解决方案.
Jsp内置对象session总结:详细介绍,Session机制,原理,生命周期h和Session的主要方法等。
关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效。 如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定...
java初学者练习jsp页面session的使用,一个经典小案例 书写环境 jb2006 直接使用
本文对servlet和jsp中的session作了详细的介绍,包括cookie对于开发wed服务程序很有帮助,是对http无状态协议的深入理解
例1:jsp页面间通过request/session传值 session1.jsp(从表单输入usernmae,将该参数传递到session2.jsp)
MyEclipse编辑JSP卡死解决方案设置一般的打开格式,更快的打开 ,提高效率
NULL 博文链接:https://itfinder.iteye.com/blog/1892381
在usercheck.jsp中进行验证,成功则显示index.jsp(在index.jsp中要检查session.getAttribute("user")是否为空), 失败则重定向到usercheck.jsp。 2、使用JSP中的session对象,模拟用户登陆。 (1)在7-5index.jsp...