今天發現一個問題,程式在本地運行好好地,打包到伺服器,無論怎麼加日誌,更新打包,最後還是有問題,
一步一步定位問題,發現是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。