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了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.