java配合js在前臺獲取jsessionid

瀏覽器與服務器之間的每一個回話都有一個session,session id 是位置標誌,在java環境中,這個session的 id 就叫做jsessionid。
可以直接中session中獲取,比如String jsessionid = request.getSession.getId();

開啓一段新的回話時,服務器會把jsessionid傳到瀏覽器,瀏覽器存在cookie中,
存在cookie以後,chrome瀏覽器的Application中可以查看:


第一次建立連接的時候,服務器會通過Response Headers 回傳jsessionid。即瀏覽器第一次請求服務器時cookie中並沒有jsessionid,
但是我們可以想到從Response Headers 對象中獲取jsessionid,但是js獲取Response Headers 對象後打印出來,此對象裏面並不存在Set-Cookie這個屬性,原因不詳。所以不能從Set-Cookie中得到jsessionid。那麼只能手動把服務器中session的id傳到前臺。

假設已經jsessionid已經被設置進cookie中了,我們可以直接從cookie中獲取。實現代碼如下:
function getSessionId(){
            var c_name = 'JSESSIONID';  
            if(document.cookie.length>0){  
               c_start=document.cookie.indexOf(c_name + "="); 
               if(c_start!=-1){ 
                 c_start=c_start + c_name.length+1;
                 c_end=document.cookie.indexOf(";",c_start);  
                 if(c_end==-1) c_end=document.cookie.length;  
                 return unescape(document.cookie.substring(c_start,c_end));  
               }
            }
        }
但是第一次請求時這樣並不能獲取JSESSIONID。
改進一下代碼:
java代碼:
String sessionId = session.getId();
 model.addAttribute("JSESSIONID", sessionId);
return "index";

html代碼(index.jsp):
<input type="hidden" id="JSESSIONID" value="${JSESSIONID}"/>

javascript代碼:
function getSessionId(){
            var c_name = 'JSESSIONID';  
            if(document.cookie.length>0){  
               c_start=document.cookie.indexOf(c_name + "="); 
               if(c_start!=-1){ 
                 c_start=c_start + c_name.length+1;
                 c_end=document.cookie.indexOf(";",c_start);  
                 if(c_end==-1) c_end=document.cookie.length;  
                 return unescape(document.cookie.substring(c_start,c_end));  
               }else{
                    //手動從後臺傳來sessionid
                  var JSESSIONID = $('#JSESSIONID').val();
                  return JSESSIONID;
               }
            }
        }

這樣的話不管是第一次建立連接還是第n次請求,都可以獲取jsessionid了。
發佈了74 篇原創文章 · 獲贊 88 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章