Ein PHP-applikasjon tener Alice og Bob, og begge brukar cURL-klienten på tenarsida for å nå den same eksterne nettstaden gjennom ein proxy. Viss kvar førespurnad lastar cookies.txt, kan dei to brukarane arve same eksterne innlogging. Å endre proxyadressene deira skil ikkje den fila.

Vel eigaren av kaka før du vel filnamnet. Vanlegvis er det den logiske eksterne sesjonen til applikasjonen: ein lokal brukar, ein bestemd ekstern konto og, der det trengst, eit eige arbeidsområde. Eit proxy-endepunkt er eit rutingsval, ikkje ein påliteleg sesjonsidentifikator. Fleire brukarar kan dele eitt endepunkt, og eit endepunkt kan rotere utgangar.

Last og lagre krukka til same sesjon

Lat applikasjonen kople den autentiserte sesjonen sin til ein tenargenerert filnøkkel. Med ei privat kakemappe og ein trugen $sessionKey har cURL-oppsettet denne forma:

$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,
]);

For ein tillaten sesjonstest på ein offentleg nettstad i eit nettverk som tillèt ein offentleg mellommann, leverer HTTP-proxylista kandidatendepunkt. Bruk eit handtak utan konfigurert proxyautentisering eller lagra proxy-legitimasjon, og hald kaketilstanden tildelt den tiltenkte sesjonen. Dette utdraget set opp eit handtak; applikasjonen utfører overføringa og kontrollerer resultatet gjennom den vanlege førespurnadsflyten sin. COOKIEFILE lastar tidlegare kaker for sesjonen. COOKIEJAR vel kvar handtaket skriv dei lagra kakene sine. Å berre setje utdatafila lastar ikkje den tidlegare innlogginga.

Ein ny sesjon kan starte utan fil. Gi den første overføringa den tiltenkte krukkevegen, lat nettstaden etablere kakene, og lagre den resulterande tilstanden for neste førespurnad. Kakemappa må vere skrivbar for arbeidaren til applikasjonen og haldast utanfor det offentleg tente dokumenttreet. Gjer ikkje eit brukarnamn eller ein veg frå ein vitjande om til eit filnamn; slå opp den trugne nøkkelen på tenaren.

Lagring treng ein plass i livssyklusen til førespurnaden

libcurl skriv vanlegvis krukka under oppryddinga av handtaket. Viss applikasjonen treng eit eksplisitt lagringspunkt etter den eksterne utvekslinga, kan han be om:

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

Dette skriv kakene handtaket no kjenner til den oppsette krukka. Avslutt bruken av handtaket for den sesjonen før du tildeler det urelatert arbeid. Å endre berre krukkevegen på eit handtak som alt held kakene til Alice, er ikkje det same som å lage den reine sesjonen til Bob.

Skil òg ein vellukka nedlasting frå vellukka lagring. Dokumentasjonen for kakekrukka nemner at ein skrivefeil under oppryddinga ikkje blir returnert som ein vanleg overføringsfeil. Kontroller mappeeige, løyve og diagnostisk utdata frå applikasjonen når ei innlogging fungerer for éin førespurnad og forsvinn ved den neste.

Samtidige førespurnader innfører ei anna grense. To arbeidarar kan laste same gamle krukka, endre tilstanden sin i minnet uavhengig og deretter lagre ulike resultat. Ei lås per sesjon eller tilsvarande serialisering må dekkje heile sekvensen med lasting, utveksling og lagring viss begge førespurnadene deler éi ekstern innlogging; å låse berre den siste skrivinga forsonar ikkje dei tidlegare augeblinksbileta deira. Ulike sesjonar bør ha ulike filer og uavhengige låsar.

Ved utlogging avsluttar du den tiltenkte eksterne sesjonen og trekkjer tilbake den lokale kaketilstanden etter policyen til applikasjonen. Ein nyleg vald proxy kan då koplast til kva ny sesjon brukaren enn startar, utan at proxyadressa avgjer kven si innlogging som ligg i minnet.

Relaterte artiklar