簡體   English   中英

jsessionid作為路徑參數在Tomcat中不起作用

[英]jsessionid as path parameter not working in Tomcat

我正在使用Tomcat 7.0.84,我的Web應用程序使用Servlet 3.0部署描述符。 web.xml文件包含以下內容:

<session-config>
  <cookie-config>
    <name>JSESSIONID</name>
    <http-only>false</http-only>
  </cookie-config>
  <tracking-mode>URL</tracking-mode>
  <tracking-mode>COOKIE</tracking-mode>
</session-config>

我有一個登錄到Web應用程序並建立會話的桌面應用程序。 作為對用戶操作的響應,它在瀏覽器中調用URL。 由於我希望瀏覽器使用相同的會話登錄,因此我添加了jsessionid path參數,如下所示:

http:// server / contextroot / path /; jsessionid = 8BDF744802E7850D5AA4AB6535163504

我完全關閉了瀏覽器,因此當生成URL時,將不會發送以前的會話cookie。 (我的默認瀏覽器是chrome,我確認是這種情況。)

我還非常在代碼中通過記錄ServletContext.getEffectiveSessionTrackingModes的返回值來啟用了URL跟蹤模式

我期望的是瀏覽器請求自動獲取; jsessionid參數指示的會話,但是這沒有發生。 每次Tomcat在其響應中包括一個新的會話cookie。

該代碼曾經用於Tomcat的早期版本(可能是5.5)和Servlet 2.3規范。 我沒有在Servlet 3.0規范或Tomcat文檔中看到任何指示這不起作用的東西,並且我全都沒有想法。

有誰知道為什么這沒有按預期進行?

這是我如何使它工作的:

在web.xml中,我更改了

 <cookie-config>
    <name>JSESSIONID</name>
    <http-only>false</http-only>
  </cookie-config>

至:

 <cookie-config>
    <name>jsessionid</name>
    <http-only>false</http-only>
  </cookie-config>

因此會話cookie名稱現在全為小寫,並且與jsessionid路徑參數的名稱完全匹配。

另一種工作方式是將路徑參數名稱從jsessionid更改為JSESSIONID。 這是因為,在Tomcat中,如果您明確配置會話cookie的名稱,它將使用該名稱作為用於傳遞會話ID的path參數的名稱。 這似乎不符合Servlet 3.0規范的7.1.3節,即:

會話ID必須在URL字符串中編碼為路徑參數。 參數的名稱必須為jsessionid。 這是包含編碼路徑信息的URL的示例:

http://www.myserver.com/catalog/index.html;jsessionid=1234

但是,它確實符合第7.1.1節中的摘錄:

如果Web應用程序為其會話跟蹤cookie配置了自定義名稱,並且在URL中編碼了會話ID(前提是已啟用URL重寫),則相同的自定義名稱也將用作URI參數的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM