同一個 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