在開發 WAP 應用時,常遇到模擬器不支援 Cookie 導致表單驗證失效的問題。ASP.NET 2.0 將 cookieless 屬性從布林值擴充為 HttpCookieMode 列舉,提供四種模式:AutoDetect、UseCookies、UseDeviceProfile、UseUri,以更精細地控制 Session ID 與驗證票的傳遞方式。
https://localhost:1115/FormsAuthentication/(F(V0-gEZNEzXUqevbOqKwNoBcMf6vBWnyNbdpa2UhZzrfOUkGPvyB91-9nFlnBDmCAgdpz4gJ6kq-QOVjbNsvKig2))/Security/Default.aspx此模式適用於無 Cookie 環境,但會改變 URL 結構。
| 模式 | 行為說明 |
|---|---|
AutoDetect | 自動偵測用戶端實際是否支援 Cookie,動態決定採用 Cookie 或 URI。 |
UseCookies | 強制使用 Cookie,忽略用戶端能力。 |
UseDeviceProfile | 依據 .browser 定義檔判斷裝置能力(預設值)。注意:定義檔可能與實際裝置不符。 |
UseUri | 強制使用 URI 嵌入模式,忽略用戶端能力。 |
關鍵提醒:AutoDetect 偵測的是「實際支援度」,而 UseDeviceProfile 依賴定義檔;若定義檔標示支援 Cookie 但實際不支援,會導致驗證失敗。另請注意預設值是 UseDeviceProfile 而非 AutoDetect。
當啟用 URI 模式(或搜尋引擎如 Googlebot 觸發 AutoDetect 後使用 URI)時,URL 會多出一層虛擬目錄。若頁面使用相對路徑(~/),解析時會產生 ../ 導致路徑跳出應用程式根目錄,拋出此異常。三種解決方案:
cookieless="UseCookies" 強制使用 Cookie。.browser 定義檔,標示支援 Cookie(參考社群文章 "Get GoogleBot to crash your .NET 2.0 site")。ResolveUrl 或 ResolveClientUrl)。ASP.NET 2.0 對 Cookieless 的重新設計,核心在於提升對行動裝置與異質環境的相容性。理解四種模式差異與 URI 模式對 URL 結構的影響,能有效避開部署陷阱。