Verificatie van formulieren oplossen


ASP .NET ondersteuning Voice kolom


Verificatie van formulieren oplossen

Als u deze kolom aan uw behoeften wilt aanpassen, nodigen we u uit uw ideeën over onderwerpen in te dienen die interessant zijn voor u en problemen die u in toekomstige behandeld wilt zien worden in Knowledge Base-artikelen en in kolommen voor spraak-ondersteuning. U kunt uw ideeën en feedback via het formulier Vragen voor het indienen. Er is ook een koppeling naar het formulier onderaan in deze kolom.
Welkom bij de kolom ASP.NET ondersteuning stem! Mijn naam is Jerry Orman. Ik meer dan 5 jaar zijn geweest met Microsoft en bezig geweest met de meeste van mijn tijd gericht op Web-gerelateerde technologieën, zoals Microsoft FrontPage en de nieuwe technologieën van Microsoft SharePoint. Ik hebt besteed aan het laatste jaar werken met ASP.NET als een ondersteuningstechnicus van Microsoft. Deze maand in de kolom ondersteuning stem ga ik wordt uitgelegd hoe problemen in Microsoft ASP.NET Forms-verificatie.

Verificatie van formulieren oplossen


Wanneer u Forms-verificatie in een ASP.NET-toepassing gebruikt, vindt u het misschien nodig voor het oplossen van een probleem dat optreedt wanneer de gebruiker willekeurig wordt omgeleid naar de aanmeldingspagina. In een ideale wereld zou dit probleem zich op een wijze die kunt u eenvoudig een debugger koppelen en het probleem vast te leggen. In een productieomgeving is dit echter zelden het geval. Om een willekeurige probleem wilt oplossen, moet u zich aanmelden informatie met betrekking tot het probleem, zodat u de hoofdoorzaak kunt beperken.

In deze kolom komen we kort het begrip Forms-verificatie. Vervolgens bekijken we in welke gevallen leiden tot een gebruiker wordt omgeleid naar de aanmeldingspagina en vastleggen van gegevens die relevant is voor het probleem te isoleren. Het implementeren van een interface IHttpModule om de gegevens voor Forms-verificatie ook komen.

Forms-verificatie-overzicht

Wanneer een gebruiker wordt geverifieerd op een website met behulp van Forms-verificatie, maakt de server een cookie. De waarde van de cookie is een verificatieticket gecodeerde formulieren. De cookie wordt doorgegeven aan de server bij elke aanvraag voor de toepassing en de klasse FormsAuthenticationModule decodeert de cookiewaarde en bepaalt of de gebruiker al dan niet geldig is.

De klasse FormsAuthenticationModule wordt standaard toegevoegd in het bestand Machine.config. De klasse FormsAuthenticationModule beheert de FormsAuthentication.

Het volgende is een fragment uit het bestand Machine.config:
<httpModule>     …other modules…
<add name="FormsAuthentication"
type="System.Web.Security.FormsAuthenticationModule" />
…other modules…
</httpModule>

De algemene HTTP-verkeer voor het verifiëren via de verificatie van formulieren lijkt op het volgende:
  1. De client stuurt een HTTP GET op Default.aspx. Geen formulieren verificatiecookie wordt verzonden.
  2. De server verstuurt een 302 (redirect) naar Login.aspx.
  3. De client stuurt een HTTP POST naar Login.aspx. Het bevat de gegevens voor aanmelding.
  4. De server verstuurt een 302 (redirect) op Default.aspx. De verificatiecookie formulieren is opgenomen.
  5. De client stuurt een HTTP GET op Default.aspx. Dit omvat de verificatiecookie formulieren.
Ga naar de volgende MSDN-websites voor meer informatie over het implementeren en het gebruik van verificatie van formulieren:Ga naar de volgende ASP.NET-website voor meer informatie over het delen van formulieren verificatiecookies:

Redenen dat een gebruiker wordt omgeleid naar de aanmeldingspagina.

De verificatiecookie formulieren verloren is gegaan

Scenario 1

In dit scenario kan een gebruiker zich aanmeldt op de website. Op een bepaald moment, verzendt de client een aanvraag naar de server, en de
Klasse FormsAuthenticationModule ontvangt de cookie niet. Als een aanvraag niet de cookie bevat doordat cookie logging in Microsoft Internet Information Services (IIS), kunt u bepalen. Ga hiervoor als volgt te werk:
  1. Open de IIS Microsoft Management Console (MMC).
  2. Klik met de rechtermuisknop op de website en klik vervolgens op
    Eigenschappen.
  3. Klik op het tabblad website en klik op Logboekregistratie inschakelen.
  4. Zorg ervoor dat de indeling W3C Extended Log File Format.
  5. Klik op Eigenschappen.
  6. Klik op het tabblad Geavanceerd en klik vervolgens op
    Uitgebreide eigenschappen.
  7. Schakel het selectievakje Cookie(cs(Cookie)) onder Uitgebreide eigenschappen, en de verwijzende site (cs(Referer)) selectievakje.
Nadat dit probleem zich voordoet, kunt u bepalen welke client was het probleem en van de client-IP-adres. Het IIS-logboek op dat de client het IP-adres filteren en weergeven van de kolom <cookie>.

Opmerking Log Parser kunt u de IIS-logboeken worden geparseerd. Logboek-Parser downloaden, gaat u naar de volgende Microsoft-website:Nadat u de lijst met aanvragen van die specifieke gebruiker hebt, zoekt u de aanvragen naar de aanmeldingspagina. U weet dat ze zijn omgeleid naar deze pagina en u wilt zien van de aanvragen voordat de omleiding is opgetreden. Als u iets ziet als de volgende, de client heeft niet verzenden de cookie of de cookie is verwijderd op het netwerk tussen client en server.

Dit is de eerste aanmelding.
MethodePaginaReactieCookies
Toevoegen/Default.aspx302 (redirect)Geen Cookies
Toevoegen/Login.aspx200 (succes)Geen Cookies
Verzenden/Login.aspx302 (redirect)Geen Cookies
Toevoegen/Default.aspx200 (succes).ASPXAUTH
Toevoegen/SomePage.aspx302 (redirect)Nr. Cookie ASPXAUTH
Dit zijn andere aanvragen, gevolgd door een aanvraag naar een pagina op de site zonder de. Cookie ASPXAUTH.
MethodePaginaReactieCookies
Toevoegen/SomePage.aspx302 (redirect)Nr. Cookie ASPXAUTH
Toevoegen/Login.aspx200 (succes)Nr. Cookie ASPXAUTH
Verzenden/Login.aspx302 (redirect)Nr. Cookie ASPXAUTH
Toevoegen/SomePage.aspx200 (succes).ASPXAUTH

Opmerking Het eerste verzoek van de gebruiker is niet waarschijnlijk een verificatiecookie formulieren hebben, tenzij u een permanente cookie maakt. Het IIS-logboek ziet u alleen de cookies die zijn ontvangen in de aanvraag. Het eerste verzoek om de verificatiecookie formulieren worden op de aanvraag na een geslaagde aanmeldingspoging.
Scenario 2

De verificatiecookie formulieren kan ook worden verloren bij overschrijding van de limiet van de cookie van de client. Er is een limiet van 20 cookies in Microsoft Internet Explorer. Nadat de 20th cookie is gemaakt op de client, worden vorige cookies verwijderd uit de collectie van de client. Als de. ASPXAUTH cookie wordt verwijderd, de gebruiker wordt omgeleid naar de aanmeldingspagina wanneer de volgende aanvraag wordt verwerkt.

U kunt deze scenario's op dezelfde manier oplossen. Bekijk de aanvraag NET voor de omleiding naar de aanmeldingspagina. Als het verzoek om deze pagina cookies genereert, is dit iets te onderzoeken.

Voor meer informatie klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

306070 het nummer en de maximale grootte van cookies in Internet Explorer


Fiddler kunt u de HTTP-headers die worden verzonden naar de client weergeven. Nadat u het verkeer vastlegt, dubbelklikt u op een verzoek en klik vervolgens op berichtkoppen als u de header Set-Cookie wilt. Als u een geslaagde aanmelding traceren, ziet u de header Set-Cookie in de reactie van een geslaagde aanmelding.

Fiddler downloaden, gaat u naar de volgende website van Fiddler:
Scenario 3

Nadat de aanvraag de client blijft, zijn er verschillende lagen die van invloed kunnen zijn op de pakketten die worden verzonden. Om te bepalen als een netwerkapparaat de cookie verwijdert, hebt u een netwerk-trace op de client en de server vastleggen en kijkt u vervolgens in het hoofdgedeelte van de aanvraag voor de cookie. Wilt u Bekijk aanvraag om ervoor te zorgen dat de cookie van de client en de servertracering om ervoor te zorgen dat de server het cookie ontvangen controleren.

Clientaanvraag

Dit is een GET-verzoek nadat de gebruiker is geverifieerd. De formulieren van het ticket verificatiegegevens blauw gemarkeerd. Dit bevestigt dat de cookie-informatie naar de client links. Wanneer u een netwerk hulpprogramma, zoals Netmon, ziet u het verkeer dat door de adapter daadwerkelijk hebben doorlopen.
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

Server-side-aanvraag

Als u naar het verzoek dat de server bereikt kijkt, wilt u Zorg ervoor dat de server ontvangen dezelfde informatie die de client verzonden. Als de server niet dezelfde informatie hebt ontvangen, moet u bij het onderzoeken van andere apparaten in het netwerk om te bepalen waar de cookie is verwijderd.

Opmerking Er zijn ook exemplaren van ISAPI-filters verwijderen van cookies. Als u bevestigt dat de webserver de cookie ontvangen, maar de cookie niet wordt vermeld in de IIS-logboeken, controleert u de ISAPI-filters. Mogelijk moet de filters verwijderen om te controleren of het probleem is opgelost.

Time-out van het ticket van forms-verificatie

Andere veelvoorkomende oorzaak voor een gebruiker wordt omgeleid is als de formulieren verificatieticket is verlopen. Het ticket van forms-verificatie kan een time-out op twee manieren. Het eerste scenario treedt op als u absolute vervaldatum. De verificatieticket verloopt met absolute vervaldatum als de verloopdatum is verstreken. Bijvoorbeeld, u een vervaldatum van 20 minuten ingesteld en een gebruiker de site bezoekt om 2:00 uur. De gebruiker wordt omgeleid naar de aanmeldingspagina als de gebruiker de site na 2:20 uur bezoekt.

Als u een verschuivende vervaldatum gebruikt, is het scenario wat moeilijker. De cookie en de resulterende ticket worden bijgewerkt als de gebruiker de site bezoekt na de verlooptijd half verlopen is. U kunt bijvoorbeeld een vervaldatum van 20 minuten instellen via verschuivende vervaldatum. Een gebruiker de site bezoekt om 2:00 uur en ontvangt de gebruiker een cookie die is ingesteld op 2:20 PM laten verlopen. De vervaldatum wordt alleen bijgewerkt als de gebruiker de site na 14:10 uur bezoekt. Als de gebruiker de site op 2:09 PM bezoekt, wordt het ticket niet bijgewerkt omdat de helft van de verlooptijd niet is verstreken. Als de gebruiker 12 minuten die de site bezoeken om 2:21 uur wacht, is het ticket zal verlopen. De gebruiker wordt omgeleid naar de aanmeldingspagina.

Eén manier om de aanpak van dit soort probleem zich aan te melden de formulieren cookie en ticket verificatiegegevens. Op deze manier ziet u of de cookie is ontvangen door IIS en de waarden. U kunt dit doen door een HttpModuleschrijven en aan te sluiten die module in de aanvraag-pipeline. Wordt er geen code van uw toepassing om de gegevens die u moet wijzigen.

De bijgevoegde voorbeeld werkt in Microsoft .NET Framework 1.1 en .NET Framework 2.0 en hele heeft. De steekproef omvat de volgende bestanden:Opmerking leg ik een downloadkoppeling voor de code die is opgegeven in het bestand FormsAuthLogger.zip.

Ik moet hier de belangrijkste gebieden aanwijzen:

Omdat altijd gerust ideeën over onderwerpen die u wilt indienen wordt verholpen in toekomstige kolommen of in de Knowledge Base met behulp van de
Vragen voor het formulier.