JSP中IE直接关闭后如何去清SESSION的最终解决方案

简介: 具体做法: 第一步: 所有在开发工程中在common的JSP页里的块中写入这样一个JAVASCRIPT函数       removeOnline(){         if(event.clientX
具体做法:
第一步:
所有在开发工程中在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事件被正常触发
 
目录
相关文章
|
7月前
|
存储 设计模式 JavaScript
掌握JavaWeb开发的必备技能:Servlet、JSP、Cookie、Session、EL、JSTL详解 ~~~~B站老杜--Servlet-JSP-课堂笔记(三)
当某个特殊的事件发生(特殊的事件发生其实就是某个时机到了。)之后,被web服务器自动调用。 思考一个业务场景
48 0
|
7月前
|
缓存 前端开发 Java
掌握JavaWeb开发的必备技能:Servlet、JSP、Cookie、Session、EL、JSTL详解 ~~~~B站老杜--Servlet-JSP-课堂笔记(二)
我们只需要service方法,其他方法大部分情况下是不需要使用的。代码很丑陋。 适配器设计模式Adapter
34 0
|
7月前
|
前端开发 Java 应用服务中间件
掌握JavaWeb开发的必备技能:Servlet、JSP、Cookie、Session、EL、JSTL详解 ~~~~B站老杜--Servlet-JSP-课堂笔记(一)
对于一个动态的web应用来说,一个请求和响应的过程有多少个角色参与,角色和角色之间有多少个协议
53 0
|
11月前
|
存储 前端开发 Java
【JavaWeb】JAVABean+Session实现JSP登录注册(List模型数据库用户信息存储+商品展示)
先说说这个题目吧,好端端的数据库不连,偏偏喜欢要整一个JavaBean和List来模拟数据库,虽然说这样的做法非常的愚蠢,但没办法,毕竟是主人的任务是吧doge。作者其实已经做了一版,但是这代码写的实在是。。。于是乎作者使用了MVC框架后整理了一个新的。(如果你学了servlet,那会发现和它的结构和思想非常的像)
86 0
|
JavaScript 前端开发 Java
JSP页面无法加载.js文件的解决方案
JSP页面无法加载.js文件的解决方案
|
存储 Java
2022年jsp课时十三——Cookie和Session的应用
2022年jsp课时十三——Cookie和Session的应用
79 0
2022年jsp课时十三——Cookie和Session的应用
|
Java
JSP Session应用
JSP Session应用
69 0
|
Java
JSP Session
JSP Session
56 0
|
JavaScript
ie8 ie浏览器下载excel文件乱码,变成压缩包,解决方案
ie8 ie浏览器下载excel文件乱码,变成压缩包,解决方案
173 0
|
Java 应用服务中间件
IDEA出现问题:修改jsp页面tomcat不生效解决方案
IDEA出现问题:修改jsp页面tomcat不生效解决方案
634 0
IDEA出现问题:修改jsp页面tomcat不生效解决方案