En PHP-applikation betjener Alice og Bob, og begge bruger dens server-side cURL-klient til at nå det samme eksterne websted gennem en proxy. Hvis hver anmodning indlæser cookies.txt, kan de to brugere arve det samme eksterne login. At ændre deres proxyadresser adskiller ikke den fil.

Vælg cookiens ejer, før du vælger filnavnet. Normalt er det applikationens logiske eksterne session: en lokal bruger, en bestemt ekstern konto og, hvor det er nødvendigt, et separat arbejdsområde. Et proxy-endpoint er et routingvalg, ikke en pålidelig sessionidentifikator. Flere brugere kan dele ét endpoint, og et endpoint kan rotere udgange.

Indlæs og gem samme sessions krukke

Lad applikationen knytte sin godkendte session til en servergenereret filnøgle. Med en privat cookiemappe og en betroet $sessionKey har cURL-konfigurationen denne form:

$jar = $cookieDirectory . '/' . $sessionKey . '.cookies';

$ch = curl_init('https://service.example.net/account');
curl_setopt_array($ch, [
    CURLOPT_PROXY => 'http://proxy.example.net:8080',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_COOKIEFILE => $jar,
    CURLOPT_COOKIEJAR => $jar,
]);

Til en tilladt sessionstest på et offentligt websted i et netværk, der tillader en offentlig mellemmand, leverer HTTP-proxylisten kandidat-endpoints. Brug et handle uden konfigureret proxygodkendelse eller opbevarede proxyoplysninger, og hold cookietilstanden tildelt dens tilsigtede session. Dette uddrag konfigurerer et handle; applikationen udfører overførslen og kontrollerer resultatet gennem sit normale anmodningsflow. COOKIEFILE indlæser tidligere cookies for sessionen. COOKIEJAR vælger, hvor handle'en skriver sine opbevarede cookies. Hvis kun outputfilen angives, indlæses det tidligere login ikke.

En ny session kan starte uden fil. Giv dens første overførsel den tilsigtede krukke-sti, lad webstedet etablere cookierne, og gem den resulterende tilstand til den næste anmodning. Cookiemappen skal kunne skrives af applikationens worker og holdes uden for det offentligt udbudte dokumenttræ. Lav ikke et besøgsleveret brugernavn eller en sti om til et filnavn; slå den betroede nøgle op på serveren.

Gemning skal have en plads i anmodningens livscyklus

libcurl skriver normalt krukken under oprydning af handle'en. Hvis applikationen har brug for et eksplicit gemmepunkt efter den eksterne udveksling, kan den anmode om:

curl_setopt($ch, CURLOPT_COOKIELIST, 'FLUSH');

Dette skriver de cookies, som handle'en aktuelt kender, til dens konfigurerede krukke. Afslut brugen af handle'en til den session, før du tildeler den urelateret arbejde. At ændre kun krukke-stien på et handle, der allerede holder Alices cookies, svarer ikke til at oprette Bobs rene session.

Skel også mellem en vellykket download og en vellykket vedholdenhed. Cookiekrukke-dokumentationen bemærker, at en skrivefejl under oprydning ikke returneres som en almindelig overførselsfejl. Kontroller mappeejerskab, tilladelser og applikationens diagnostiske output, når et login virker for én anmodning og forsvinder ved den næste.

Samtidige anmodninger indfører endnu en grænse. To workers kan indlæse den samme gamle krukke, uafhængigt ændre deres tilstand i hukommelsen og derefter gemme forskellige resultater. En lås pr. session eller tilsvarende serialisering skal dække hele sekvensen med indlæsning, udveksling og gemning, hvis begge anmodninger deler ét eksternt login; at låse kun den sidste skrivning forliger ikke deres tidligere snapshots. Forskellige sessioner bør have forskellige filer og uafhængige låse.

Ved logout afsluttes den tilsigtede eksterne session, og dens lokale cookietilstand trækkes tilbage efter applikationens politik. En nyligt valgt proxy kan derefter knyttes til enhver ny session, som brugeren starter, uden at proxyadressen skal afgøre, hvis login der er i hukommelsen.

Relaterede artikler