2011-09-12 63 views
2

我正在使用帶有jsessionid的URL,例如。jsessionid忽略

http://localhost:8080/myservlet;jsessionid=123

然而每當我在HttpServletRequest的讀出的會話ID值是從未123,而是生成的會話ID,例如。 B663A96D3FBC84B4A427C0810EAB9073。

爲什麼我的jsessionid被忽略?

+1

你是如何產生這個會話ID的?你使用哪個容器(tomcat等)?你不能簡單地自己設置JSESSIONID ... – home

回答

0

我的猜測是,大多數應用程序服務器默認使用cookie進行會話跟蹤,而不是URL重寫。因此,如果您的請求在網址中包含會話Cookie和JSESSIONID,則它可能會使用Cookie中的cookie。檢查您的應用服務器的文檔以瞭解如何配置它。

+0

不正確。 Java服務器同時支持。 –

+0

@BastianVoigt我的回答說「默認爲」,而不是「僅支持」。如果服務器被配置爲使用基於cookie的會話處理,它不會從查詢字符串中讀取「jsessionid」,因爲它爲什麼會這樣呢? – millimoose

+0

至少我使用的所有java服務器(tomcat,glassfish,jboss和jetty)默認同時支持jsessionid的cookie和URL參數,但它們不能配置爲使用其中一個或另一個。 –

5

這是因爲您指定了一個會話ID,在服務器內存中沒有對象存在具體的HttpSession。換句話說,給定的會話ID是未知的/無效的。您需要指定一個會話ID,用於引用服務器內存中有效的和現有的對象HttpSession

假設你確實有有效HttpSession與ID B663A96D3FBC84B4A427C0810EAB9073目前在服務器的內存,那麼下面的鏈接將工作,並給終端用戶訪問正是HttpSession

http://localhost:8080/myservlet;jsessionid=B663A96D3FBC84B4A427C0810EAB9073