表單驗證的疑難排解

文章翻譯 文章翻譯
文章編號: 910439 - 檢視此文章適用的產品。
ASP.NET 語音支援專欄

表單驗證的疑難排解

若要自訂這個資料行,您的需求,我們想要邀請您送出問題,您要查看以及您有興趣的相關想法,解決在未來知識庫文件和 Support Voice 資料欄。您可以送出您的想法和意見反應使用 向詢問 表單。此外,還有在本篇文章下方表格的連結。
全部展開 | 全部摺疊

在此頁中

歡迎使用 ASP.NET Support Voice 資料行!我的名字Jerry 的 Orman。我已經向 Microsoft 為期 5 年,花了大部分的我致力於 Web 相關的技術,例如,經由按一下表單上的時間,新的 Microsoft SharePoint 技術。我曾經花費處理之最後一年Microsoft ASP.NET 做支援工程師。本月的 < Support Voice資料行中,我將說明如何疑難排解中的表單驗證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,進而 cookie記錄在 Microsoft Internet Information Services (IIS)。若要執行這項操作,請依照下列步驟執行:
  1. 開啟 IIS Microsoft 管理主控台 (MMC)。
  2. 網站] 上按一下滑鼠右鍵,然後按一下屬性.
  3. 按一下 網站 索引標籤,然後再按一下 啟用記錄.
  4. 請確定記錄檔格式 W3C 擴充記錄檔格式.
  5. 按一下 屬性.
  6. 按一下 進階 索引標籤,然後再按一下擴充的屬性.
  7. 在下 擴充的屬性按一下以選取 Cookie(cs(Cookie)) 核取方塊, 索引器(cs(Referer)) 核取方塊。
之所以發生這個問題之後,再判斷哪些用戶端一共分成問題,且該用戶端的 IP 位址。篩選在該用戶端的 IP 位址,IIS 記錄檔和檢視cookie> 資料行。

附註您可以使用 Log Parser 剖析 IIS 記錄檔。如果要下載記錄剖析器,請造訪下列 Microsoft 網站:
http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07
當您有了來自此特定要求的清單使用者的登入網頁要求的搜尋。您知道他們已被重新導向此頁面上,而您想要的要求之前,請參閱重新導向發生。如果您看到類似下列文字,用戶端可能並未傳送 cookie 已移除的用戶端之間的網路上與伺服器。

這是初始登入。
摺疊此表格展開此表格
方法頁面回應Cookie
取得/Default.aspx302 (重新導向)否Cookie
取得/Login.aspx200 (成功)否Cookie
張貼/Login.aspx302 (重新導向)否Cookie
取得/Default.aspx200(成功).ASPXAUTH
取得/SomePage.aspx302 (重新導向)否.ASPXAUTH 的 Cookie
這些是其他的要求,之後的頁面在網站上執行要求不需要。ASPXAUTH 的 cookie。
摺疊此表格展開此表格
方法頁面回應Cookie
取得/SomePage.aspx302 (重新導向)否.ASPXAUTH 的 Cookie
取得/Login.aspx200 (成功)否.ASPXAUTH 的 Cookie
張貼/Login.aspx302 (重新導向)否.ASPXAUTH 的 Cookie
取得/SomePage.aspx200(成功).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://local
68 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,但是沒有列出 cookie在 IIS 記錄檔,檢查 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 版,並具有在整個註解。這個範例包括下列檔案:
  • FormsAuthEvents.cs: 類別會實作IHttpModule ,並繫結到Application_BeginRequest事件。
  • FormsAuthInfo.cs: 類別來擷取 cookie 和解密表單驗證票證。它還會檢查應用程式的若要確保您的表單驗證的 Web.config 檔案會被啟用。
  • FormsAuthConfig.cs: 類別讀取的資訊FormsAuthLogger.config 檔案。
  • Log.cs: 檔案會接受 stringbuilder,並寫出的值記錄檔。
  • FormsAuthLogger.config: XML 檔案讀取 Log.cs 檔。這檔案必須使用內建的 DLL 的 /bin 資料夾內。該檔案可讓您設定下列各項:
    • Ip 篩選器: 您可以篩選的資料擷取用戶端的 IP。如此一來,您可以從用戶端,也是以記錄只要求重現問題。這樣可以減少記錄檔的大小。
    • 擷取類型: 這會指定要儲存檔案的位置。預設值是 [暫存 ASP.NET 檔案] 資料夾中,但您可以儲存這個任何一處,只要在背景工作處理序帳戶有權寫入資料夾。
附註我會提供的下載連結,如中所提供的程式碼FormsAuthLogger.zip 檔案。

我會註明此處的主要區域:
  1. 建立實作IHttpModule介面的類別。
    public class FormsAuthEvents : IHttpModule 
    {
    		…code…
    }
  2. 您想要查看的事件呼叫。在這個範例中,我們將使用Application_BeginRequest事件。如此一來,我們可以調查每個要求,並判斷是否如果 cookie 有,有的表單驗證 cookie 和記錄檔FormsAuthenticationTicket
    public void Init(HttpApplication application) 
    {
    	//Wire up the BeginRequest event
    	application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
    }
  3. 實作Application_BeginRequest事件。
    private void Application_BeginRequest(Object source, EventArgs e)
    {	
       …code to log the ticket…
    }
    
  4. 擷取表單驗證 cookie,並順利解密它。
  5. 記錄值。我建議以下登入除了 「 表單 」 資訊。這樣可協助您對齊] 將對齊表單IIS 記錄檔,如有必要的驗證資訊:
    • 日期: 可讓您接收要求時,請參閱單元。
    • RequestType: 顯示是否要求的 Get 或後置。
    • URL: 顯示的模式導致此問題的要求。
    • 查閱者
    • ClientIP: 相繫,在特定的要求用戶端。

同樣的請隨意送出您想要的想法主題解決在日後的專欄中,或是在眭舑使用 向詢問 表單。

屬性

文章編號: 910439 - 上次校閱: 2013年5月30日 - 版次: 2.0
這篇文章中的資訊適用於:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 2.0
關鍵字:?
kbtshoot kbiis kbcode kbasp kbmt KB910439 KbMtzh
機器翻譯
請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。
按一下這裡查看此文章的英文版本:910439
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com