JSP中IE直接關閉後如何去清SESSION的最終解決方案

來源:互聯網
上載者:User
具體做法: 第一步:所有在開發工程中在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事件被正常觸發
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.