ASP.NET Forms 驗證中常見兩大疑問:
timeout="400000" 仍在 1-2 天後失效。timeout,預設 30 分鐘)。驗證流程:建立 Ticket → 建立 Cookie → 將 Ticket 存入 Cookie → 發送至瀏覽器。兩者只要有一個過期,驗證即失效。 故須同時設定 Cookie 的 timeout 為長期。
ASP.NET 使用 machineKey 加密/解密 Cookie。預設 machineKey 在應用程式啟動時隨機生成。若應用程式池回收,新 Key 無法解密舊 Cookie,導致用戶被登出。
<machineKey
validationKey="88CB6CA6CF403C5FBB41C2F62BB7FCFCA05DE7BE"
decryptionKey="B8A7CF3816C57176"
validation="SHA1" />
可使用線上工具生成金鑰(如 aspnetresources.com)。
總結:理解 Ticket/Cookie 雙層過期機制與 MachineKey 加密特性,是解決 Forms 驗證持久化問題的關鍵。