Dela via


Cookiehantering i WinHTTP

HTTP-sessionsdata skickas mellan klienten och servern i cookiehuvudet för begäran eller svaret. Servern skickar cookies till klienten i set-cookie-huvudet för svaret och WinHTTP-API:et skickar servercookien igen till servern i cookiehuvudet för begäran. Specifikationerna för cookiehantering, som beskrivs i rfc 2109 (HTTP State Management Mechanism), implementeras som standard i WinHTTP. De senaste specifikationerna för cookiehantering, som beskrivs i rfc 2964, stöds inte av WinHTTP.

WinHTTP hämtar cookien från servrarna Set-Cookie-huvudet och lagrar den i en cache per session. Den här cookien skickas igen vid efterföljande begäranden i samma WinHTTP-session där målet matchar källan till cookien. WinHTTP API:et återskapar cookie-headern för varje steg i begäran.

I följande lista beskrivs flera alternativ som WinHTTP-klientprogram kan använda för att hantera cookies:

  • Automatisk cookiehantering – WinHTTP hanterar automatiskt cookies och klientprogrammet utför ingen anpassad cookiehantering.
  • Inaktivera automatisk cookiehantering – Automatisk cookiehantering i WinHTTP-API:et inaktiveras och inga cookies skickas.
  • Ange alla cookies manuellt – Automatisk cookiehantering inaktiveras och klientprogrammet lägger till eller tar bort alla cookiehuvuden för varje begäran i sessionen.
  • Manuell och automatisk cookiehantering – Kombinera automatisk och manuell cookiehantering.

För att inaktivera cookiehantering anropar WinHTTP-klientprogrammet funktionen WinHttpSetOption med parametern dwOption inställd på WINHTTP_OPTION_DISABLE_FEATUREoch parametern lpBuffer inställd på WINHTTP_DISABLE_COOKIES. Parametern hInternet måste vara en begärandereferens. När cookiehantering har inaktiverats på en begärandereferens som har skickat en tidigare begäran bör klienten manuellt ta bort befintliga cookierubriker för begäran med funktionen WinHttpAddRequestHeaders innan nästa begäran skickas. Mer information finns i Ta bort cookiehuvuden.

Not

Klientprogrammet måste ange alla cookies i sessionen när automatiskt läge har inaktiverats.

Ange alla cookies manuellt

När automatisk cookiehantering är inaktiverad har WinHTTP-klientprogrammet möjlighet att ange alla cookies manuellt. För att ange cookien manuellt anropar programmet WinHttpAddRequestHeaders och anger cookierubriken i parametern pwszHeaders. Klientprogrammet bör rensa alla cookiehuvuden innan begäran skickas igen.

Klientprogrammet bör också ändra cookiehuvudet när begäran har omdirigerats. Om du vill ändra cookien för omdirigerade begäranden anger klienten en återanropsfunktion med WinHttpSetStatusCallback som svarar på återanropsfallet för omdirigering. Motringningshanteraren bör rensa cookien som tidigare skickats på begäran genom att anropa WinHttpAddRequestHeaders. Mer information om hur du tar bort cookiehuvuden finns i Ta bort cookierubriker.

WinHTTP-klientprogram kan kombinera mekanismen för automatisk cookiehantering i WinHTTP med manuell cookiehantering. Programmet lägger till anpassade cookies i den automatiskt genererade cookierubriken innan begäran skickas med funktionen WinHttpSendRequest. Den anpassade cookien ska vara den första cookierubriken i begäran om att WinHTTP-API:et ska cachelagrat cookien korrekt. Klientprogrammet bör också ta bort cookies som skickats på tidigare begäranden innan en begäran skickas på samma begärandehandtag. Mer information finns i Ta bort cookierubriker.

Cookies som lagts till i en begäran före anropet till WinHttpSendRequest ingår i alla WinHTTP-begäranden som skickas för nästa WinHttpSendRequest och WinHttpReceiveResponse samtal. Klientprogrammet kan behöva rensa cookiehuvudet när begäran har omdirigerats. För att rensa cookien på omdirigerade begäranden anger klienten en återanropsfunktion med WinHttpSetStatusCallback som svarar på återanropsfallet för omdirigering. Motringningshanteraren bör rensa cookien som tidigare skickades på begäran genom att anropa WinHttpAddRequestHeaders. Återanropsfunktionen kanske inte ställer in nya anpassade cookies på återanropet. Klienten måste vänta på att WinHttpReceiveResponse- ska slutföras innan nya cookies läggs till för nästa WinHttpSendRequest--anrop.

WinHTTP-klientprogrammet kan behöva rensa den befintliga cookien för begäran innan en begäran skickas igen för att förhindra att cookies som skickats på tidigare begäranden skickas igen på den aktuella begäran. Mer information finns i följande anteckning. Tänk också på att cookies inte behöver rensas innan den första begäran skickas i begäranshanteringen. Klienten kan rensa befintliga cookies genom att anropa WinHttpAddRequestHeaders med en tom cookierubrik i parametern pwszHeaders och flaggan WINHTTP_ADDREQ_FLAG_REPLACE som anges i parametern dwModifier. I följande kodexempel visas hur du rensar cookiehuvudet på begäran.

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

WinHTTP-API:et har olika beteende för cookiehantering för tidigare versioner av operativsystemet än Windows XP med Service Pack 2 (SP2) och Windows Server 2003 med Service Pack 1 (SP1).

**Windows XP med SP2 och senare och Windows Server 2003 med SP1 och senare: **

WinHTTP-API:et rensar alla cookies som skickats på tidigare förfrågningar för förfrågningshandtaget. Klienten kan lägga till nya cookiehuvuden manuellt före varje anrop till WinHttpSendRequest. Om funktionen för automatisk cookiehantering i WinHTTP-API:et inte har inaktiverats lägger WinHTTP API till den nya cookierubriken (eller lägger till en ny cookierubrik om klientprogrammet inte lade till en manuellt) med cookien från servern.

**Windows XP med SP2 och Windows Server 2003 med SP1: **

WinHTTP-API:et rensar inte cookie-huvudet för begäran efter att WinHttpReceiveResponse har slutförts. Cookies som skickats i tidigare begäranden kommer att bli återaktiverade i efterföljande anrop till WinHttpSendRequest. WinHTTP-klientprogrammet bör rensa befintliga cookie-huvuden innan det skickar en förfrågan igen via begärandehandtaget.