表單驗證的疑難排解

ASP.NET 語音支援專欄

疑難排解的表單驗證

若要自訂這個資料行,您的需求,我們想要邀請您送出您感興趣,您和您要查看的問題的主題相關的想法將來解決知識庫文件和 Support Voice 資料欄。您可以在您的想法和意見反應使用要求的它表單提交。此外,還有在本專欄的底部表格的連結。

歡迎使用 ASP.NET Support Voice 資料行 !我的名字是 Jerry Orman。我已經在 Microsoft 工作5年,並且大部分時間專注於 Web 相關的技術,例如 Microsoft FrontPage 和新的 Microsoft SharePoint 技術。去年我擔任支援工程師負責 Microsoft ASP.NET。在支援語音] 欄中,這個月我將說明如何疑難排解在 Microsoft ASP.NET 表單驗證。

疑難排解的表單驗證

當您在 ASP.NET 應用程式中使用表單驗證時,您可能會發現需要對使用者隨機重新導向至登入網頁時,就會發生的問題做疑難排解。在理想的世界中,這個問題會發生方式會讓您輕鬆地將附加偵錯工具,並擷取問題。在實際執行環境中,不過,這幾乎是大小寫。如果要疑難排解類似的隨機問題,您需要記錄與問題相關的讓您可以縮小的根本原因的資訊。

在本專欄中,我們將簡要說明表單驗證概念。我們會再查哪些案例會導致使用者被重新導向至登入網頁,以及如何擷取隔離問題與相關的資料。我們也會介紹如何實作 IHttpModule 介面記錄的表單驗證資訊。

表單驗證概觀

當使用者到網站上使用表單驗證,則伺服器會建立 cookie。Cookie 的值是加密的表單驗證票證。Cookie 時,會傳遞至伺服器上,對應用程式中,每個要求,且FormsAuthenticationModule類別解密 cookie 值,並判斷使用者是否為有效。

根據預設, FormsAuthenticationModule類別就會加入 Machine.config 檔。FormsAuthenticationModule類別會管理依處理程序。

以下是從 Machine.config 檔的項目︰

<httpModule>     …other modules…
<add name="FormsAuthentication"
type="System.Web.Security.FormsAuthenticationModule" />
…other modules…
</httpModule>

一般的 HTTP 流量,來使用表單驗證來驗證看起來類似下列︰

  1. 用戶端傳送 HTTP GET 到 Default.aspx。沒有表單驗證 cookie 會傳送。

  2. 伺服器傳送 Login.aspx 302 回應 (重新導向)。

  3. 用戶端會傳送 HTTP 張貼到 Login.aspx。其中包括登入資訊。

  4. 伺服器傳送 Default.aspx 302 回應 (重新導向)。表單驗證 cookie 會包含項目。

  5. 用戶端傳送 HTTP GET 到 Default.aspx。這包括表單驗證 cookie。

如需有關實作和使用表單驗證的詳細資訊,請造訪下列 MSDN 網站︰

http://msdn2.microsoft.com/en-us/library/7t6b43z4.aspx

http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthentication(vs.71).aspx

http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthenticationticket(vs.71).aspx如需共用表單 」 驗證 cookie 的詳細資訊,請造訪下列 ASP.NET 網站︰

http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx

使用者可能會被重新導向至登入頁面的原因

表單驗證 cookie 將會遺失

狀況1


在這個案例中,在使用者登入到網站中。有些時候,用戶端將要求傳送至伺服器,以及
FormsAuthenticationModule類別不會收到的 cookie。您可以決定是否使用者要求沒有包含 cookie 藉由啟用記錄在 Microsoft Internet Information Services (IIS) 的 cookie。若要這麼做,請依照下列步驟執行:

  1. 開啟 IIS Microsoft 管理主控台 (MMC)。

  2. 網站] 上按一下滑鼠右鍵,然後按一下
    屬性

  3. 按一下 [網站] 索引標籤,然後按一下 [啟用記錄

  4. 請確定記錄檔格式是W3C 擴充記錄檔格式

  5. 按一下 [內容]。

  6. 按一下 [進階] 索引標籤,然後按一下
    擴充屬性

  7. 在 [擴充內容] 中,按一下以選取 [ Cookie(cs(Cookie)) ] 核取方塊和索引器 (cs(Referer)) ] 核取方塊。

會發生這個問題之後,判斷哪些用戶端一共分成問題以及該用戶端的 IP 位址。篩選 IIS 記錄檔,該用戶端的 IP 位址,並檢視 <cookie> 資料行。

注意您可以使用 Log Parser 剖析 IIS 記錄檔。若要下載記錄剖析器,請造訪下列 Microsoft 網站︰

http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07您的要求,從該特定的使用者清單之後,登入網頁要求的搜尋。您知道它們而重新導向至這個網頁,而您想要重新導向發生前,請參閱要求。如果您看到類似下列,用戶端可能並未傳送 cookie,或在用戶端和伺服器之間的網路上已移除的 cookie。

這是初始登入。

方法

頁面

回應

Cookie

取得

/Default.aspx

302 (重新導向)

沒有 Cookie

取得

/Login.aspx

200 (成功)

沒有 Cookie

張貼

/Login.aspx

302 (重新導向)

沒有 Cookie

取得

/Default.aspx

200 (成功)

.ASPXAUTH

取得

/SomePage.aspx

302 (重新導向)

[否]。ASPXAUTH 的 Cookie

這些是其他的要求,後面加上要求的頁面上沒有網站。ASPXAUTH cookie。

方法

頁面

回應

Cookie

取得

/SomePage.aspx

302 (重新導向)

[否]。ASPXAUTH 的 Cookie

取得

/Login.aspx

200 (成功)

[否]。ASPXAUTH 的 Cookie

張貼

/Login.aspx

302 (重新導向)

[否]。ASPXAUTH 的 Cookie

取得

/SomePage.aspx

200 (成功)

.ASPXAUTH


注意第一個要求,從該使用者不可能有表單驗證 cookie,除非您正在建立永續性的 cookie。IIS 記錄檔只會顯示您已在要求中收到的 cookie。成功的登入嘗試後,要求上都會有表單驗證 cookie 的第一個要求。

狀況2


當超過用戶端 cookie 限制時,表單驗證 cookie 可能也會遺失。在 Microsoft Internet Explorer,會有 20 cookie 的限制。20 的 cookie 會建立在用戶端之後,先前的 cookie 將會從用戶端的集合中移除。如果。ASPXAUTH cookie 會被移除,使用者將被重新導向至登入網頁處理下一個要求時。

您可以使用相同的方式來疑難排解這兩種情況。 查看之前重新導向至登入網頁要求。如果這個頁面的要求產生 cookie,這會是調查的項目。

如需詳細資訊,按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:

306070數字,並在 Internet Explorer 中以 cookie 的大小限制


您可以使用 Fiddler,來檢視傳送至用戶端的 HTTP 標頭。擷取流量之後,請按兩下要求,,,然後按一下 [若要查看設定 Cookie 標頭的標頭。如果您追蹤成功的登入,您會看到設定 Cookie 中的標頭的成功登入回應。

若要下載 Fiddler,請造訪下列 Fiddler 網站︰

http://www.fiddlertool.com/fiddler/

案例 3


要求離開用戶端之後,就有可能會影響所送出的封包的各層。如果要判斷 cookie 時,如果要移除網路裝置,您必須擷取網路追蹤用戶端和伺服器,然後尋找 cookie 要求主體中。您想要查看以確定,已傳送 cookie,用戶端要求,並檢查伺服器追蹤,以確定伺服器收到的 cookie。

用戶端要求

在驗證使用者之後,這會是 GET 要求。表單驗證票證資訊會以藍色來醒目提示。這個頁面會確認 cookie 資訊保留用戶端。當您使用網路擷取,這類的工具 Netmon,您會看到真正發生的透過配接器的流量。

47 45 54 20 68 74 74 70-3a 2f 2f 6c 6f 63 61 6c   GET http://local68 6f 73 74 2f 46 6f 72-6d 73 41 75 74 68 4c 6f   host/FormsAuthLo
67 54 65 73 74 2f 57 65-62 46 6f 72 6d 31 2e 61 gTest/WebForm1.a
73 70 78 20 48 54 54 50-2f 31 2e 31 0d 0a 41 63 spx HTTP/1.1..Ac
63 65 70 74 3a 20 69 6d-61 67 65 2f 67 69 66 2c cept: image/gif,
…Other headers of the GET request…
63 68 65 0d 0a 43 6f 6f-6b 69 65 3a 20 2e 41 53 che..Cookie: .AS
50 58 41 55 54 48 3d 33-43 45 46 39 42 39 41 30 PXAUTH=3CEF9B9A0
43 33 37 41 44 46 36 33-45 36 42 44 33 37 42 36 C37ADF63E6BD37B6
39 43 44 41 32 35 30 30-30 46 38 30 37 32 38 46 9CDA25000F80728F
35 31 43 39 35 36 36 44-31 34 43 35 34 31 34 35 51C9566D14C54145
38 31 43 39 33 45 32 41-30 31 44 44 43 44 45 46 81C93E2A01DDCDEF
32 34 41 31 37 34 32 39-34 31 30 43 30 39 37 34 24A17429410C0974
42 33 45 43 42 30 36 34-32 32 38 45 33 35 33 39 B3ECB064228E3539
39 41 38 32 32 42 33 42-39 33 36 44 46 30 38 46 9A822B3B936DF08F
42 41 42 44 33 45 31 30-32 44 30 30 32 31 30 43 BABD3E102D00210C
32 45 31 33 39 38 30 37-39 42 32 33 35 32 39 46 2E1398079B23529F
34 46 35 44 37 34 41 3b-20 50 72 6f 66 69 6c 65 4F5D74A; Profile
3d 56 69 73 69 74 6f 72-49 64 3d 62 32 34 65 62 =VisitorId=b24eb

伺服器端的要求

當您查看到達伺服器的要求時,您會想要確定伺服器接收到相同的用戶端傳送的資訊。如果伺服器未收到相同的資訊,您必須調查網路來判定移除了 cookie 上的其他裝置。

注意也已移除 cookie 的 ISAPI 篩選器的執行個體。如果您確認 Web 伺服器收到的 cookie,但 IIS 記錄檔中未列出的 cookie,請檢查 [ISAPI 篩選器。您可能必須移除篩選,問題是否已經解決。

表單驗證票證逾時

使用者會被重新導向其他常見的原因是如果表單驗證票證已過期。表單驗證票證可以兩種方式的逾時時間。如果您使用絕對期限,就會發生第一個案例。使用絕對期限,驗證票證到期的到期時間過期時。例如,您設定到期日的 20 分鐘,而使用者在 2:00 PM 造訪網站。如果使用者在 2:20 PM 之後造訪網站時,使用者會重新導向至登入網頁。

如果您使用滑動期限時,案例就會是有點複雜。如果使用者造訪網站,到期時間半過期後,會更新 cookie 和產生的票證。例如,您會使用滑動期限設定 20 分鐘的到期日。使用者在 2:00 PM 造訪網站,使用者會收到設在 2:20 PM 到期的 cookie。如果使用者在 2:10 PM 之後造訪網站時,才會更新到期日。如果使用者會在 2:09 PM 造訪網站,因為超過到期時間的一半,將不會更新票證。如果使用者再等待 12 分鐘,在 2:21 PM 造訪網站,就會過期的票證。使用者重新導向至登入頁面。

單向方法記錄表單驗證 cookie 和票證資訊為這種類型的問題。如此一來,您可以看到是否 IIS 和值為何所收到的 cookie。藉由撰寫HttpModule中,並重新連接至要求管線的該模組,您可以執行這項操作。您不會修改您的應用程式碼,以取得所需的資訊。

附隨的範例適用於 Microsoft.NET Framework 1.1 和.NET Framework 2.0 版,並有整個註解。這個範例包括下列檔案︰請注意我會提供的下載連結的 FormsAuthLogger.zip 檔案所提供的程式碼。

我會註明的主要的區域︰


如往常,我們編寫哪一方面送出您想要的想法主題將來解決資料行,或在知識庫的使用
請為它的表單。

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

Thank you for your feedback!

Thank you for your feedback! It sounds like it might be helpful to connect you to one of our Office support agents.

×