Delen via


Cookieafhandeling in WinHTTP

HTTP-sessiegegevens worden doorgegeven tussen de client en de server in de cookieheader van de aanvraag of het antwoord. De server verzendt cookies naar de client in de set-cookieheader van het antwoord en de WinHTTP-API stuurt de servercooky opnieuw naar de server in de cookieheader van de aanvraag. De specificaties voor het verwerken van cookies, zoals beschreven in rfc 2109 (HTTP State Management Mechanism), worden standaard geïmplementeerd in WinHTTP. Recente specificaties voor cookieafhandeling, zoals beschreven in rfc 2964, worden niet ondersteund door WinHTTP.

WinHTTP verkrijgt de cookie van de servers Set-Cookie header en slaat deze per sessie op in een cache. Deze cookie wordt opnieuw verzonden voor volgende aanvragen in dezelfde WinHTTP-sessie waarbij het doel overeenkomt met de bron van de cookie. De WinHTTP-API genereert de requestcookie-header opnieuw voor elke fase in de aanvraag.

In de volgende lijst worden verschillende opties beschreven die WinHTTP-clienttoepassingen kunnen gebruiken om cookies te verwerken:

  • Automatische cookieafhandeling - WinHTTP verwerkt automatisch cookies en de clienttoepassing voert geen aangepaste cookieafhandeling uit.
  • Automatische cookieafhandeling uitschakelen - Automatische cookieafhandeling in de WinHTTP-API is uitgeschakeld en er worden geen cookies verzonden.
  • Geef handmatig alle cookies op: automatische cookieafhandeling is uitgeschakeld en de clienttoepassing voegt alle cookieheaders voor elke aanvraag in de sessie toe of verwijdert deze.
  • Handmatige en automatische cookieafhandeling - Combineer automatische en handmatige cookieafhandeling.

Als u cookieafhandeling wilt uitschakelen, roept de WinHTTP-clienttoepassing de functie WinHttpSetOption- aan met de parameter dwOption ingesteld op WINHTTP_OPTION_DISABLE_FEATUREen wordt de parameter lpBuffer ingesteld op WINHTTP_DISABLE_COOKIES. De parameter hInternet moet een aanvraaghandle zijn. Wanneer cookieafhandeling is uitgeschakeld op een aanvraaggreep die een vorige aanvraag heeft verzonden, moet de client handmatig bestaande aanvraagcookieheaders verwijderen met de WinHttpAddRequestHeaders-functie voordat de volgende aanvraag wordt verzonden. Zie Cookieheaders verwijderenvoor meer informatie.

Notitie

De clienttoepassing moet alle cookies op de sessie instellen nadat de automatische modus is uitgeschakeld.

Handmatig alle cookies opgeven

Wanneer automatische cookieafhandeling is uitgeschakeld, heeft de WinHTTP-clienttoepassing de mogelijkheid om alle cookies handmatig op te geven. Om de cookie handmatig in te stellen, roept de toepassing WinHttpAddRequestHeaders aan de cookieheader op te geven in de parameter pwszHeaders. De clienttoepassing moet alle cookieheaders wissen voordat de aanvraag opnieuw wordt verzonden.

De clienttoepassing moet ook de cookieheader wijzigen wanneer de aanvraag is omgeleid. Als de cookie veranderd moet worden voor omgeleide aanvragen, geeft de client een callback-functie op met WinHttpSetStatusCallback die reageert op het callback-geval van omleiding. De callback-handler moet de cookie wissen die eerder op de aanvraag is verzonden door WinHttpAddRequestHeadersaan te roepen. Zie CookieHeaders verwijderenvoor meer informatie over het verwijderen van cookieheaders.

WinHTTP-clienttoepassingen kunnen het mechanisme voor automatische cookieafhandeling van WinHTTP combineren met handmatige cookieafhandeling. De toepassing voegt aangepaste cookies toe aan de automatisch gegenereerde cookieheader voordat de aanvraag wordt verzonden met de WinHttpSendRequest functie. De aangepaste cookie moet de eerste cookieheader in de aanvraag voor de WinHTTP-API zijn om de cookie correct in de cache op te cachen. De clienttoepassing moet ook cookies verwijderen die zijn verzonden op eerdere aanvragen voordat een aanvraag opnieuw wordt verzonden op dezelfde aanvraagafhandeling. Zie CookieHeaders verwijderen voor meer informatie.

Cookies die zijn toegevoegd aan een aanvraag voordat de aanroep naar WinHttpSendRequest zijn opgenomen in alle WinHTTP-aanvragen die namens de volgende WinHttpSendRequest- en WinHttpReceiveResponse-aanroepen worden verzonden. De clienttoepassing moet mogelijk de cookieheader wissen wanneer de aanvraag is omgeleid. Om de cookie voor omgeleide aanvragen te wissen, specificeert de cliënt een callbackfunctie met WinHttpSetStatusCallback die reageert op het omleidingscallback-geval. De callback-handler moet de cookie wissen die eerder op de aanvraag is verzonden door WinHttpAddRequestHeadersaan te roepen. De callback-functie kan geen nieuwe aangepaste cookies instellen voor de omleidingsaanroep. De client moet wachten tot WinHttpReceiveResponse- is voltooid voordat er nieuwe cookies worden toegevoegd voor de volgende WinHttpSendRequest aanroep.

De WinHTTP-clienttoepassing moet mogelijk de bestaande aanvraagcookies wissen voordat een aanvraag opnieuw wordt verzonden om te voorkomen dat cookies die zijn verzonden op eerdere aanvragen opnieuw worden verzonden op de huidige aanvraag; Zie de volgende opmerking voor meer informatie. Houd er ook rekening mee dat cookies niet hoeven te worden gewist voordat de eerste aanvraag wordt verzonden op de aanvraagafhandeling. De client kan bestaande cookies wissen door WinHttpAddRequestHeaders aan te roepen met een lege cookieheader in de parameter pwszHeaders en de WINHTTP_ADDREQ_FLAG_REPLACE vlag die is ingesteld in de parameter dwModifier. In het volgende codevoorbeeld ziet u hoe u de cookieheader op het verzoek wist.

WinHttpAddRequestHeaders(hRequest, 
                         L"Cookie:", 
                         -1, 
                         WINHTTP_ADDREQ_FLAG_REPLACE);

De WinHTTP-API heeft verschillende cookieafhandelingsgedrag voor versies van het besturingssysteem die ouder zijn dan Windows XP met Service Pack 2 (SP2) en Windows Server 2003 met Service Pack 1 (SP1).

**Windows XP met SP2 en hoger en Windows Server 2003 met SP1 en hoger: **

De WinHTTP-API wist alle cookies die zijn verzonden op eerdere aanvragen voor de aanvraagafhandeling. De client kan handmatig nieuwe cookieheaders toevoegen voordat elke aanroep naar WinHttpSendRequest wordt aangeroepen. Als de functionaliteit voor automatische cookieafhandeling van de WinHTTP-API niet is uitgeschakeld, voegt de WinHTTP-API de nieuwe cookieheader toe (of voegt u een nieuwe cookieheader toe als de clienttoepassing er niet handmatig een heeft toegevoegd) met de cookie van de server.

**Windows XP met SP2 en Windows Server 2003 met SP1: **

De WinHTTP-API wist de header van de aanvraag cookie niet nadat WinHttpReceiveResponse is voltooid. Cookies die in eerdere aanvragen worden verzonden, worden opnieuw verzonden in volgende aanroepen naar WinHttpSendRequest. De WinHTTP-clienttoepassing moet bestaande cookiesheaders wissen voordat een aanvraag opnieuw wordt verzonden in de aanvraagafhandeling.