許多 Web 專案實作「自動登入」功能:使用者勾選「記住我」,下次開啟瀏覽器直接帶入 Cookie 免輸入帳密。Chrome、Firefox 運作正常,唯獨 IE 瀏覽器頻繁失效。本文分享實際除錯經驗,找出根本原因並給出解決方案。
name 屬性為空,懷疑 IE 不送出該欄位值。response.addHeader("Set-Cookie", ...) 寫入 Cookie。原始碼:<input name="" type="checkbox" id="loginChecked"> 自動登入</div>
name 為空字串,雖然非標準寫法,但 Chrome 仍送出 on 值。IE 可能忽略無名稱欄位,建議補上 name="autoLogin"。
關鍵發現:原代碼使用 response.addHeader() 手動組裝 Set-Cookie 標頭,IE 對手寫標頭解析嚴格,導致 Cookie 不生效。改用標準 API response.addCookie(cookie) 後,IE 即能正確接收並儲存 Cookie。
// 原寫法(IE 失效)
response.addHeader("Set-Cookie", cookieString);
// 修正寫法(通用)
Cookie cookie = new Cookie("autoLoginToken", tokenValue);
cookie.setMaxAge(3600); // 1 小時
cookie.setPath("/");
response.addCookie(cookie);
Cookie 機制屬 HTTP 標準,瀏覽器間差異極小。問題核心在於「伺服器如何寫入 Cookie 標頭」,而非瀏覽器讀取機制不同。
name 屬性。response.addCookie(Cookie) 寫入 Cookie,勿手拼 Set-Cookie 標頭。Path、Domain、Secure、HttpOnly 等屬性設定正確。若專案仍需支援舊版 IE(IE8/9),請額外檢查 P3P 標頭與第三方 Cookie 政策,但現代專案多已棄用 IE,建議專注於標準相容寫法。