服務端寫入cookie客戶端取不到的解決辦法
阿新 • • 發佈:2019-01-25
今天發現一個問題,程式在本地執行好好地,打包到伺服器,無論怎麼加日誌,更新打包,最後還是有問題,
一步一步定位問題,發現是cookie的問題。
服務端定義設定cookie的程式碼:
public void setCookie(HttpServletRequest request, HttpServletResponse response, String key,String value) { Cookie cookie = new Cookie(key, value);// 建立一個cookie,cookie的名字是key cookie.setDomain(request.getServerName()); cookie.setPath(request.getContextPath()); // 設定Cookie的有效期 cookie.setMaxAge(Constants.cookieMaxAge); // cookie.setHttpOnly(true); // 將cookie物件新增到response物件中,這樣伺服器在輸出response物件中的內容時就會把cookie也輸出到客戶端瀏覽器 response.addCookie(cookie); }
最開始是懷疑cookie沒有在服務端寫入,後來通過日誌,發現服務端寫入了,但是客戶端怎麼也取不到。以前做
web開發時遇到cookie的問題,基本就是域和路徑的問題,但是本地執行沒有問題,而且線上環境也沒有問題,我開始
琢磨應該是別的問題,過期時間問題。
我們設定的時間是43200秒也就是12個小時,但是實際上看到進入首頁,確實寫入了cookie,但是過期時間是在服務
器時間的12小時之後,這裡就是問題的重點。測試伺服器時間設定的超前了。
最後發現測試環境的機器確實被人動過,時間改為了當天較早的時間,而我們的cookie過期時間是12個小時,即使
是12個小時即43200秒也是過了當前時間,後來修改測試環境時間為當前時間就好了,這樣tomcat也不用重啟。
修改伺服器時間:
說明一點,如果在伺服器端將cookie的httpOnly屬性設定為true,也是會導致伺服器寫入了cookie,客戶端取不到cookie。