1. 程式人生 > >服務端寫入cookie客戶端取不到的解決辦法

服務端寫入cookie客戶端取不到的解決辦法

      今天發現一個問題,程式在本地執行好好地,打包到伺服器,無論怎麼加日誌,更新打包,最後還是有問題,

一步一步定位問題,發現是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。