首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 2.0 Forms 驗證 Cookie 深度解析:Ticket 與 Cookie 的過期機制

     編輯:關於ASP.NET

核心問題:為什麼「記住我」失效?

ASP.NET Forms 驗證中常見兩大疑問:

  1. 勾選「記住我」約 30 分鐘仍被登出。
  2. 設定 timeout="400000" 仍在 1-2 天後失效。

Ticket 與 Cookie 的區別

  • Cookie:客戶端容器,存放 Ticket,有獨立過期時間(web.config timeout,預設 30 分鐘)。
  • Ticket:驗證資料本體(含用戶名、過期時間),若勾選「記住我」則 Ticket 過期時間極長。

驗證流程:建立 Ticket → 建立 Cookie → 將 Ticket 存入 Cookie → 發送至瀏覽器。兩者只要有一個過期,驗證即失效。 故須同時設定 Cookie 的 timeout 為長期。

機器金鑰 導致的失效

ASP.NET 使用 machineKey 加密/解密 Cookie。預設 machineKey 在應用程式啟動時隨機生成。若應用程式池回收,新 Key 無法解密舊 Cookie,導致用戶被登出。

解決方案:固定 MachineKey

<machineKey 
    validationKey="88CB6CA6CF403C5FBB41C2F62BB7FCFCA05DE7BE" 
    decryptionKey="B8A7CF3816C57176" 
    validation="SHA1" />

可使用線上工具生成金鑰(如 aspnetresources.com)。

總結:理解 Ticket/Cookie 雙層過期機制與 MachineKey 加密特性,是解決 Forms 驗證持久化問題的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved