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

原创 2006年05月28日 18:14:00
具体做法:
第一步:
所有在开发工程中在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中禁用session 这样就禁止了
  • shipeng22022
  • shipeng22022
  • 2013年01月17日 11:56
  • 1519

页面关闭时结束Session

首先创建页面LogOut.aspx protected void Page_Load(object sender, EventArgs e){    Session.Abandon();} 脚本...
  • tao19840705
  • tao19840705
  • 2011年02月12日 08:35
  • 715

如何清除jsp页面缓存、cookie、session

一、清除页面缓存         在jsp页里:                                               response.setHeader("Prag...
  • u012832949
  • u012832949
  • 2014年07月20日 22:59
  • 1089

jsp 清除session的方法

转载自:http://wenda.haosou.com/q/1366841722067447 就是关于如何清除当前页面的session 退出到首页,使用户再次登陆必须提供正确的用户名和密码我的三个页...
  • u012377333
  • u012377333
  • 2015年12月03日 11:51
  • 3151

直接关闭IE,释放Session

jsp:function destroySession(){if((window.event.clientXnewwindow=window.open("invalidateSession.do",n...
  • devfan
  • devfan
  • 2009年05月11日 21:24
  • 435

jsp中获取session的值

String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServ...
  • u010049282
  • u010049282
  • 2014年07月11日 14:11
  • 1775

如何关闭ie默认下载!用IE下载东西后不提示打开

  在网上浏览.doc文档时,会问你是打开还是保存。其中还有一个可选项是“打开此类文件之前总是询问”,有时候觉得老是要选择打开还是保存麻烦,就把这个可选项去掉。等到以后想直接保存或打开 的时候又找不到...
  • jiangzhaomaomao
  • jiangzhaomaomao
  • 2007年01月04日 16:07
  • 8181

关闭浏览器,清空SESSION

其实对于一个单独的页面是可以实现的.写下面一个方法: window.onunload = errorquit();  function errorquit(){  if(confirm("感谢使用后台...
  • luo_yifan
  • luo_yifan
  • 2009年05月19日 17:42
  • 2115

JSP中退出登录销毁Session

方法一:销毁Session对象使用session.invalidate();方法,这样可以销毁当前浏览器的Session对象及其中存放的属性; 方法二:因为判断用户是否登录是将某个属性通过sessi...
  • yiluxiangqian7715
  • yiluxiangqian7715
  • 2015年11月17日 22:32
  • 6218

关闭浏览器销毁session

今天在处理用户在线状态查看时,碰到一个问题:如果用户关闭浏览器,在IE下,通过处理 页面unload时,document.location可正常触发销毁session的跳转,但google的chrom...
  • fulinkster
  • fulinkster
  • 2011年07月06日 15:03
  • 2886
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JSP中IE直接关闭后如何去清SESSION的最终解决方案
举报原因:
原因补充:

(最多只允许输入30个字)