目錄:
1.定位問題
2.問題產生的原因
3.解決問題
一 定位問題
首先,如下圖所示:輸入到地址欄的地址被302重定向到單點登錄地址,地址由Response Headers中的參數Location所指定,勾選Preserve log,保存跳轉之前的請求軌跡。
接下來,如下圖所示:瀏覽器訪問帶 ?service=*** 的單點登錄地址來請求登錄頁,在返回的Response Headers中有參數Set-Cookie,在本地cookie中設置了CASTGC,設置了cookie的有效時間。問題就出在了這個地方,如果瀏覽器本地禁止了寫cookie操作,那么set-cookie並不會成功;那么會話的jsessionid信息會通過url重寫的方式,傳送到CAS 服務端,來保持通話。
二 問題產生的原因
通過Preserve log對上一步提交流程的跟蹤發現,定位到問題產生的原因在於:客戶端禁用cookie的情況下重寫URL。重寫URL是用封號將jsessionid緊跟在請求地址之后,在訪問參數之前的動作。
對於客戶端禁用cookie,除了重寫URL,還有表單隱藏字段的方法來傳遞sessionid。
三 解決問題
在web.xml中添加如下配置文件:
<session-config> <tracking-mode>COOKIE</tracking-mode> </session-config>
四 問題補充
內存cookie和硬盤cookie:內存cookie沒有expires屬性,關閉瀏覽器后再重新打開頁面,就會丟失。硬盤cookie設置了expires屬性,此時cookie將保存到硬盤上。
如何禁用URL重寫,參考:https://fralef.me/tomcat-disable-jsessionid-in-url.html。