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

ASP.NET 2.0 表單驗證 Cookieless 屬性完整指南

     編輯:關於ASP.NET

背景:行動裝置與無 Cookie 環境的挑戰

在開發 WAP 應用時,常遇到模擬器不支援 Cookie 導致表單驗證失效的問題。ASP.NET 2.0 將 cookieless 屬性從布林值擴充為 HttpCookieMode 列舉,提供四種模式:AutoDetect、UseCookies、UseDeviceProfile、UseUri,以更精細地控制 Session ID 與驗證票的傳遞方式。

兩種核心儲存機制

  1. Cookie 模式:傳統方式,將 Session ID 與驗證票存於用戶端 Cookie。
  2. URI 嵌入模式:將加密後的識別資訊直接嵌入 URL 路徑中,例如:
    https://localhost:1115/FormsAuthentication/(F(V0-gEZNEzXUqevbOqKwNoBcMf6vBWnyNbdpa2UhZzrfOUkGPvyB91-9nFlnBDmCAgdpz4gJ6kq-QOVjbNsvKig2))/Security/Default.aspx
    此模式適用於無 Cookie 環境,但會改變 URL 結構。

四種 HttpCookieMode 詳細解析

模式行為說明
AutoDetect自動偵測用戶端實際是否支援 Cookie,動態決定採用 Cookie 或 URI。
UseCookies強制使用 Cookie,忽略用戶端能力。
UseDeviceProfile依據 .browser 定義檔判斷裝置能力(預設值)。注意:定義檔可能與實際裝置不符。
UseUri強制使用 URI 嵌入模式,忽略用戶端能力。

關鍵提醒:AutoDetect 偵測的是「實際支援度」,而 UseDeviceProfile 依賴定義檔;若定義檔標示支援 Cookie 但實際不支援,會導致驗證失敗。另請注意預設值是 UseDeviceProfile 而非 AutoDetect。

經典異常:"Cannot use a leading .. to exit above the top directory" 成因與對策

當啟用 URI 模式(或搜尋引擎如 Googlebot 觸發 AutoDetect 後使用 URI)時,URL 會多出一層虛擬目錄。若頁面使用相對路徑(~/),解析時會產生 ../ 導致路徑跳出應用程式根目錄,拋出此異常。三種解決方案:

  1. 設定 cookieless="UseCookies" 強制使用 Cookie。
  2. 為搜尋引擎建立自訂 .browser 定義檔,標示支援 Cookie(參考社群文章 "Get GoogleBot to crash your .NET 2.0 site")。
  3. 修正程式碼,將相對路徑改為絕對路徑(可用 ResolveUrl 或 ResolveClientUrl)。

結語

ASP.NET 2.0 對 Cookieless 的重新設計,核心在於提升對行動裝置與異質環境的相容性。理解四種模式差異與 URI 模式對 URL 結構的影響,能有效避開部署陷阱。

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