1. 調整專案目標 Framework 至 4.7.2
2. 設定 Cookie SameSite 與 Secure 參數
3. 啟用 SSL 設定
4. 測試 Cookie 設定參數是正確
到此為止程式碼的設定就完成了,原本我是這麼想的但接下來的狀況就是不斷的踩雷,下面是我所遇到的狀況與解決辦法。
1. 已設定 SameSite 但卻沒有生效 ( 可能是空白或者是 Lax )
因為 SameSite 設定需搭配 Https 才會生效,所以如果要測試請記得將 Https 打開,本機測試可以到 IIS "建立自我簽屬憑證" 進行測試。
2. Framework 已升級至 4.7.2 但 SameSite 設定還是沒有生效
爬了一些文之後才發現,原本的 Framework 4.7.2 存在一些 Bug,在 FormsAuth 和 SessionState 即使設定還是會維持 Lax, 所以更新完成之後還必須更新相關套件才可以正常 Work,各 OS 需更新套件版本請參考下面連結。
3. Cookie __RequestVerificationToken 失效
升上 Framework 4.7.2 之後,所有 Cookie 都會新增 Samesite 參數,並預設 Lax,但舊版本之瀏覽器並不支援,所以使用舊版本之瀏覽器時會有 Cookie 失效的情況發生,這時候必須將 Samesite 設為 -1 ( 代表不使用此參數 ),才可以正常工作。
Cookie SameSite属性介绍及其在ASP.NET项目中的应用
支援 Samesite 屬性的瀏覽器
最後特別補充一下,SameSite 與 Secure 都可以透過 WebConfig 設定,但我的開發環境一直無法辨識 SameSite 參數,所以最後只好透過程式控制,如果大家沒有這個問題,可以透過 WebConfig 設定就好,這樣其實比較簡單清楚。
升上 Framework 4.7.2 之後,所有 Cookie 都會新增 Samesite 參數,並預設 Lax,但舊版本之瀏覽器並不支援,所以使用舊版本之瀏覽器時會有 Cookie 失效的情況發生,這時候必須將 Samesite 設為 -1 ( 代表不使用此參數 ),才可以正常工作。
Cookie SameSite属性介绍及其在ASP.NET项目中的应用
支援 Samesite 屬性的瀏覽器
最後特別補充一下,SameSite 與 Secure 都可以透過 WebConfig 設定,但我的開發環境一直無法辨識 SameSite 參數,所以最後只好透過程式控制,如果大家沒有這個問題,可以透過 WebConfig 設定就好,這樣其實比較簡單清楚。
參考資料: