我有一個非常基本的問題,如何創建HTTPSession的作品。我知道你們夥計們會看到這個問題,因爲類似的問題 類似的問題存在。但有理由爲什麼我問這個問題這裏是: -當請求來自web服務器而不是web瀏覽器時,HTTPSession的創建如何工作?
我知道httpsession是網絡瀏覽器所獨有的,服務器在我們首次執行HttpServletRequest.getSession時創建它。它將保持相同的會話,直到我們關閉瀏覽器 。但我有一點點不同的情況。我有一個Web應用程序在一個Tomcat實例上說T1.On這個Web應用程序的歡迎頁面 我已經提供了兩個鏈接,點擊它可以把我帶到不同web應用程序的相同java servlet(S1)託管在另一個Tomcat實例T2上(這兩個鏈接 打開兩個單獨的彈出窗口)。現在,我先點擊link1並檢查S1中的sessionId,然後查找它的值爲1678.現在,我先點擊link2和 檢查S1中的sessionId,然後再次查找它的值爲1678. 我的問題是爲什麼我得到來自link1和link2的請求都來自 的請求的同一會話ID?我可以做些什麼來獲得這兩個請求的不同會話?
尋找淨可能的解決方案後,我試了一下: -在LINK1的點擊,在Servlet的S1,我複製會話屬性,使它無效並創建新的一個。 說新的會話ID是8765。現在我點擊link2,並在這個請求中找到了同樣的會話。所以我進一步無效並創建新的(例如 新的會話ID是4897)。理想情況下,它應該過期第一個瀏覽器會話(點擊link1生成)。要驗證它,我點擊彈出的任何地方1它沒有得到 已過期,但我再次看到最後生成的會話ID,即4897.我不明白爲什麼它附加相同的會話ID與兩個彈出窗口?
人們感謝您耐心等待您的時間,並閱讀這個長長的場景?
編輯: -
Cookie[] cookies = req.getCookies();
if(cookies!=null)
for (int i = 0; i < cookies.length; i++) {
cookies[i].setMaxAge(0);
context.getResponse().getHttpServletResponse().addCookie(cookies[i]);
}
HttpSession myAppSession = req.getSession();//line 1
假設在鏈路1的點擊,我得到的會話ID爲1234,再經過2鏈接點擊一下也是我得到相同的會話ID。根據我的理解,在執行第1行以上的代碼之後,我應該得到不同的會話ID,因爲我在獲取會話之前將MaxAge設置爲0。但它沒有發生?
拉梅什感謝回覆正確的節點。在考慮了cookie事實之後,重構了代碼,但它仍然返回相同的會話ID。在原文中查看我的編輯部分 – 2012-02-06 10:18:50
你能告訴兩個服務器的域名是什麼嗎? – 2012-02-06 10:23:04
你應該嘗試訪問不同的域名。 – 2012-02-06 10:26:08