PHP cURL tegle za kolačiće za odvojene korisničke sesije
Dizajniranje trajnosti kolačića PHP cURL oko udaljene sesije: pouzdana imena datoteka, eksplicitno spremanje i paralelni zahtjevi.
PHP aplikacija opslužuje Alice i Bob, a oboje koriste njen serverski cURL klijent da preko proxyja dođu do iste udaljene web stranice. Ako svaki zahtjev učitava cookies.txt, dva korisnika mogu naslijediti istu udaljenu prijavu. Promjena njihovih proxy adresa ne razdvaja tu datoteku.
Odaberite vlasnika kolačića prije nego odaberete ime datoteke. Obično je to logička udaljena sesija aplikacije: lokalni korisnik, određeni udaljeni račun i, gdje je potrebno, odvojen radni prostor. Proxy krajnja točka je izbor usmjeravanja, a ne pouzdan identifikator sesije. Nekoliko korisnika može dijeliti jednu krajnju točku, a krajnja točka može rotirati izlaze.
Učitajte i spremite teglu iste sesije
Neka aplikacija preslika svoju autentificiranu sesiju u ključ datoteke koji generira server. Uz privatni direktorij kolačića i pouzdan $sessionKey, cURL konfiguracija ima ovaj oblik:
$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 dopušteni test sesije javne stranice na mreži koja dopušta javnog posrednika, popis HTTP proxyja nudi kandidat-krajnje točke. Koristite ručku bez konfigurirane proxy autentifikacije ili zadržanih proxy vjerodajnica i držite stanje kolačića dodijeljeno njegovoj namijenjenoj sesiji. Ovaj isječak konfigurira ručku; aplikacija izvodi prijenos i provjerava rezultat kroz svoj uobičajeni tok zahtjeva. COOKIEFILE učitava prethodne kolačiće za sesiju. COOKIEJAR odabire gdje ručka zapisuje svoje zadržane kolačiće. Postavljanje samo izlazne datoteke ne učitava prethodnu prijavu.
Nova sesija može početi bez datoteke. Dajte njenom prvom prijenosu namijenjenu putanju tegle, pustite stranicu da uspostavi kolačiće i spremite rezultirajuće stanje za sljedeći zahtjev. Direktorij kolačića mora biti pisan od strane aplikacijskog radnika i držan izvan javno posluženog stabla dokumenata. Ne pretvarajte korisničko ime ili putanju koju dostavi posjetitelj u ime datoteke; potražite pouzdani ključ na serveru.
Spremanje treba mjesto u životnom ciklusu zahtjeva
libcurl obično zapisuje teglu tijekom čišćenja ručke. Ako aplikacija treba eksplicitnu točku spremanja nakon udaljene razmjene, može zatražiti:
curl_setopt($ch, CURLOPT_COOKIELIST, 'FLUSH');
Ovo zapisuje kolačiće koje ručka trenutno zna u njenu konfiguriranu teglu. Završite korištenje ručke za tu sesiju prije nego je dodijelite nepovezanom radu. Promjena samo putanje tegle na ručki koja već drži Aliceine kolačiće nije jednaka stvaranju Bobove čiste sesije.
Također razlikujte uspješno preuzimanje od uspješnog zadržavanja. Dokumentacija tegle kolačića napominje da se neuspjeh pisanja tijekom čišćenja ne vraća kao obična greška prijenosa. Provjerite vlasništvo direktorija, dozvole i dijagnostički izlaz aplikacije kada prijava radi za jedan zahtjev, a nestane u sljedećem.
Paralelni zahtjevi uvode još jednu granicu. Dva radnika mogu učitati istu staru teglu, neovisno promijeniti svoje stanje u memoriji i zatim spremiti različite rezultate. Brava po sesiji ili ekvivalentna serijalizacija mora pokriti cijeli slijed učitavanja, razmjene i spremanja ako oba zahtjeva dijele jednu udaljenu prijavu; zaključavanje samo završnog zapisa ne usklađuje njihove ranije snimke. Različite sesije trebaju imati različite datoteke i neovisne brave.
Pri odjavi završite namijenjenu udaljenu sesiju i povucite njeno lokalno stanje kolačića prema politici aplikacije. Novo odabrani proxy tada se može priključiti bilo kojoj novoj sesiji koju korisnik započne, bez toga da proxy adresa odlučuje čija je prijava u memoriji.