2011-04-11 49 views
3

有沒有辦法在對JAVA服務器的AJAX調用中訪問會話。在ajax調用中通過ID獲取會話

在服務器上,request對象同時具有sessioncookies屬性NULL

我可以通過會話ID作爲參數,但我如何通過ID訪問會話?

編輯

使用session.getSession(false);回報null,而session.getSession(true);顯然會返回一個新的會話,與其它ID。

回答

3

處理此問題的最佳方法是在url的末尾附加「; jsessionid =」。例如,在一個jsp:

<script type="text/javascript"> 
... 
    xhr.open("GET", url + ";jsessionid=<%=pageContext.getSession().getId()%>"); 
... 
</script> 

行:

xhr.open("GET", url + ";jsessionid=<%=pageContext.getSession().getId()%>"); 

呈現爲:如果我使用'session.getSession(真)

xhr.open("GET", url + ";jsessionid=6EBA4F94838796DC6D653DCA1DD06373"); 
+0

謝謝你的回答,我現在遇到了以下問題:字符串按照你寫的「; jsessionid = <%= pageContext.session.id%>」發送,而不是計算會話ID並且有類似的內容「; jsessionid = __sessionid__「 – 2011-04-11 11:53:03

+2

其實,scriplet應該是<%= pageContext.getSession()。getId()%>。 – 2011-04-11 12:39:35

+0

感謝您的更新 – 2011-04-11 13:10:22

0

這聽起來像你沒有一個會話!

確保何時載入包含AJAX腳本的會話在服務器上創建。

session.getSession(true); 

如果這存儲爲cookie,那麼您的AJAX調用將在它觸發時將其提交回服務器。

+0

;'然後一個新的會話是用不同的id創建的,我想爲訪問者恢復服務器上的現有會話。也許如果我通過會話ID作爲參數幫助。 – 2011-04-11 09:39:44

0

爲了訪問會話,您不需要會話ID。這一切都是由servlet容器在幕後完成的。獲取會話所有你需要做一個particluar要求是:

HttpSession session = request.getSession(false); 

其中request是你HttpServletRequest。參數false意味着「如果它不存在,請不要創建會話」。當然,如果你想讓會話在不存在的情況下創建,請使用「true」。

+0

我編輯了我的問題。我已經在做你說的話了,但不幸的是,它不起作用。 – 2011-04-11 09:45:14