session控制管理及js关闭浏览器销毁session

       因为目前项目是基于session来判断当前用户的详细情况,从一致性和可靠性来考虑,应该确保一个session一个用户。

在网上看了一些文章及经验,最后在项目中采用了cookie+session来控制的这种方法。现总结如下:

1、概念理解:cookie保存在客户端,session保存在服务器。一个线程一个session(不知道对不对,请指教)。但是,一个浏览器多个标签共用一个session的

2、登陆控制:

(1)在index.html上先判断浏览器是否支持cookie,若不支持则不能commit。

(2)在登陆Service类中判断(读取之前保存在cookie的SESSIONID是否与getSeesion()一致):

     String sessionID = request.getSession().getId();
     Cookie[] webCookie = request.getCookies();
     for(int i=0;i<webCookie.length;i++){
     if("SESSIONID".equals(webCookie[i].getName()) && sessionID.equals(webCookie[i].getValue())){
      action.addMessage("已登陆其他用户!请【安全退出】再登陆!");
      return false;
     }
     }

若登陆成功,将SessionID写入客户端的cookie:

       Cookie cookie = new Cookie("SESSIONID",sessionID);
       httpServletResponse.addCookie(cookie);

(3)由(1)(2)保证了一个用户对于一个Session,现在需要就是针对各种情况销毁Session。

这里主要考虑的是关闭浏览器时销毁sessoin。

//关闭浏览器销毁Seesion
    var xmlHttp;
    function createXMLHttpRequest()
   {
      //IE
      if (window.ActiveXObject)
      {
       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      //Other
      else if (window.XMLHttpRequest)
      {
       xmlHttp = new XMLHttpRequest();
      }
   }
   function destorySession()
   {
                       try{
                        createXMLHttpRequest();
                        var url = "destorysession.jsp";
                        xmlHttp.open("POST", url, false);
                        xmlHttp.send(null);
                        var result = xmlHttp.responseText;
                     }
                     catch(e)
                    {
                      alert("销毁Session异常!");
                     }
    }

destorysession.jsp:

<%@page contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title></title>
<body>
<%session.invalidate
(); %>
</body>
</html>

你可能感兴趣的:(session控制管理及js关闭浏览器销毁session)