PHP cURL kozarci za piškotke za ločene uporabniške seje
Oblikovanje obstojnosti piškotkov PHP cURL okoli oddaljene seje: zaupanja vredna imena datotek, izrecno shranjevanje in sočasne zahteve.
Aplikacija PHP streže Alice in Bobu, oba pa uporabljata njen strežniški odjemalec cURL, da prek proxyja dosežeta isto oddaljeno spletno mesto. Če vsaka zahteva naloži cookies.txt, lahko oba uporabnika podedujeta isto oddaljeno prijavo. Spreminjanje njunih naslovov proxy te datoteke ne loči.
Lastnika piškotka izberite, preden izberete ime datoteke. Običajno je to logična oddaljena seja aplikacije: lokalni uporabnik, določen oddaljeni račun in, kadar je potrebno, ločen delovni prostor. Končna točka proxyja je izbira usmerjanja, ne zanesljiv identifikator seje. Več uporabnikov si lahko deli eno končno točko, končna točka pa lahko menjuje izhode.
Naložite in shranite kozarec iste seje
Naj aplikacija preslika svojo overjeno sejo v ključ datoteke, ki ga ustvari strežnik. S zasebno mapo piškotkov in zaupanja vrednim $sessionKey ima konfiguracija cURL to obliko:
$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,
]);
Za dovoljen preizkus seje javnega mesta v omrežju, ki dovoljuje javnega posrednika, seznam proxyjev HTTP ponuja kandidatne končne točke. Uporabite ročico brez nastavljene avtentikacije proxyja ali shranjenih poverilnic proxyja in stanje piškotkov držite dodeljeno predvideni seji. Ta odlomek nastavi ročico; aplikacija izvede prenos in preveri rezultat skozi običajni tok zahtev. COOKIEFILE naloži prejšnje piškotke seje. COOKIEJAR izbere, kam ročica zapiše svoje shranjene piškotke. Nastavitev samo izhodne datoteke ne naloži prejšnje prijave.
Nova seja se lahko začne brez datoteke. Njenemu prvemu prenosu dajte predvideno pot kozarca, pustite spletnemu mestu, da vzpostavi piškotke, in nastalo stanje shranite za naslednjo zahtevo. Mapa piškotkov mora biti zapisljiva za delavca aplikacije in shranjena zunaj javno streženega drevesa dokumentov. Uporabniškega imena ali poti, ki jo vnese obiskovalec, ne spreminjajte v ime datoteke; zaupanja vreden ključ poiščite na strežniku.
Shranjevanje potrebuje mesto v življenjskem ciklu zahteve
libcurl običajno zapiše kozarec med čiščenjem ročice. Če aplikacija po oddaljeni izmenjavi potrebuje izrecno točko shranjevanja, lahko zahteva:
curl_setopt($ch, CURLOPT_COOKIELIST, 'FLUSH');
To zapiše piškotke, ki jih ročica trenutno pozna, v njen nastavljeni kozarec. Končajte uporabo ročice za to sejo, preden jo dodelite nepovezanemu delu. Spreminjanje samo poti kozarca na ročici, ki že vsebuje Alicine piškotke, ni enako ustvarjanju Bobove čiste seje.
Ločite tudi uspešen prenos od uspešne obstojnosti. Dokumentacija kozarca za piškotke navaja, da se napaka pisanja med čiščenjem ne vrne kot običajna napaka prenosa. Preverite lastništvo mape, dovoljenja in diagnostični izhod aplikacije, ko prijava deluje za eno zahtevo in izgine pri naslednji.
Sočasne zahteve uvedejo še eno mejo. Dva delavca lahko naložita isti stari kozarec, neodvisno spremenita svoje stanje v pomnilniku in nato shranita različne rezultate. Zaklep na sejo ali enakovredna serializacija mora pokriti celotno zaporedje nalaganja, izmenjave in shranjevanja, če obe zahtevi delita eno oddaljeno prijavo; zaklep samo končnega pisanja ne uskladi njunih prejšnjih posnetkov. Različne seje bi morale imeti različne datoteke in neodvisne zaklepe.
Ob odjavi končajte predvideno oddaljeno sejo in po politiki aplikacije umaknite njeno lokalno stanje piškotkov. Na novo izbran proxy lahko nato pripnete kateri koli novi seji, ki jo uporabnik začne, ne da bi naslov proxyja odločal, čigava prijava je v pomnilniku.