同一個 ASP 網站 HTTP 與 HTTPS 的 SessionID 不相同

在開發一個 ASP 有會員登入功能的網站時發生明明在 HTTP 下已經登入,並且將登入狀態存到 Session 了,但切換到 HTTPS 卻又是沒有登入的狀態。

原因

IIS 預設會在使用 HTTPS 時產生 Secure Cookie 來跟 HTTP 作區別,以確保 Coookie 傳輸的安全,又因為 SessionID 會存放在 Cookie 中,所以造成 HTTP/HTTPS 兩邊的 SessionID 不一樣。

解決方法

關閉 IIS 在 HTTPS 產生新 Cookie 的功能。

  • 開啟 Internet Information Services (IIS) 管理員

  • 點選你要設定的站台

  • 選擇 ASP

  • 將服務 > 工作階段內容 > 安全連線的新識別碼設為 False

  • 套用設定即完成

安全性問題

雖然關閉 [安全連線的新識別碼] 可以解決問題,但會導致 Cookie 在不安全的連線下被傳輸,這不是一個安全的做法。

Reference

Secure cookies and mixed https/http site usage
http://stackoverflow.com/questions/709085/secure-cookies-and-mixed-https-http-site-usage