前言
最近在用cas做單點登入系統時,將系統通過域名映射到外網時發現在谷歌瀏覽器中cas/login登入成功後,一刷新又彈出登入界面問題。火狐和ie都是ok的。後來各種檢查才發現谷歌瀏覽器的bug。
現象
這對這個詭異問題,通過網絡映射、系統配置等情況反反覆覆進行確認認證。發現返回的cookies過期時間在換算的bug。直接上圖說明問題:
1、在http協議下,針對ip+端口的情況下,返回的cookies過期時間;服務器端返回是格林尼治標準時間,通過谷歌瀏覽器是歎號安全信息提示部分查看到到過期時間和服務端返回過期時間,是不一樣的是經過換算的。服務器端返回是格林尼治標準時間;客戶端cookies過期時間已經換算成了GMT+8 時間了。所以在cas/login登入頁面登入成功後,再次刷新就會將cookies的CASTGC參數帶到服務器端,驗證顯示登入成功
2、在http協議下,針對域名的情況下,返回的cookies過期時間;服務器端返回是格林尼治標準時間,通過谷歌瀏覽器是歎號安全信息提示部分查看到到過期時間和服務端返回過期時間,是一樣的是未經過換算的。服務器端返回是格林尼治標準時間;客戶端cookies過期時間本應該換算成GMT+8 時間,不過谷歌瀏覽器沒換算,還是將格林尼治標準時間直接當做GMT+8時間顯示。所以cookies是過期的狀態。所以在cas/login登入頁面登入成功後,再次刷新無法將cookies的CASTGC參數帶到服務器端,通過不了驗證就會返回登入界面,讓重新登入。
https情況
後來檢查了,好像通過https協議帶證書狀態就是ok。
谷歌坑爹啊
big谷歌瀏覽器,居然還允許這個問題的情況出現。