我正在使用帶有jsessionid的URL,例如。jsessionid忽略
http://localhost:8080/myservlet;jsessionid=123
然而每當我在HttpServletRequest的讀出的會話ID值是從未123,而是生成的會話ID,例如。 B663A96D3FBC84B4A427C0810EAB9073。
爲什麼我的jsessionid被忽略?
我正在使用帶有jsessionid的URL,例如。jsessionid忽略
http://localhost:8080/myservlet;jsessionid=123
然而每當我在HttpServletRequest的讀出的會話ID值是從未123,而是生成的會話ID,例如。 B663A96D3FBC84B4A427C0810EAB9073。
爲什麼我的jsessionid被忽略?
我的猜測是,大多數應用程序服務器默認使用cookie進行會話跟蹤,而不是URL重寫。因此,如果您的請求在網址中包含會話Cookie和JSESSIONID,則它可能會使用Cookie中的cookie。檢查您的應用服務器的文檔以瞭解如何配置它。
不正確。 Java服務器同時支持。 –
@BastianVoigt我的回答說「默認爲」,而不是「僅支持」。如果服務器被配置爲使用基於cookie的會話處理,它不會從查詢字符串中讀取「jsessionid」,因爲它爲什麼會這樣呢? – millimoose
至少我使用的所有java服務器(tomcat,glassfish,jboss和jetty)默認同時支持jsessionid的cookie和URL參數,但它們不能配置爲使用其中一個或另一個。 –
這是因爲您指定了一個會話ID,在服務器內存中沒有對象存在具體的HttpSession
。換句話說,給定的會話ID是未知的/無效的。您需要指定一個會話ID,用於引用服務器內存中有效的和現有的對象HttpSession
。
假設你確實有有效HttpSession
與ID B663A96D3FBC84B4A427C0810EAB9073
目前在服務器的內存,那麼下面的鏈接將工作,並給終端用戶訪問正是HttpSession
:
http://localhost:8080/myservlet;jsessionid=B663A96D3FBC84B4A427C0810EAB9073
你是如何產生這個會話ID的?你使用哪個容器(tomcat等)?你不能簡單地自己設置JSESSIONID ... – home