PHP aplikacija poslužuje Alice i Boba, a oboje koriste njezin poslužiteljski 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 odabira imena 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 završna točka izbor je usmjeravanja, a ne pouzdan identifikator sesije. Nekoliko korisnika može dijeliti jednu završnu točku, a završna točka može rotirati izlaze.

Učitajte i spremite staklenku iste sesije

Neka aplikacija preslika svoju autentificiranu sesiju u ključ datoteke koji generira poslužitelj. 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-završne 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 započeti bez datoteke. Dajte njezinu prvom prijenosu namijenjenu putanju staklenke, pustite stranicu da uspostavi kolačiće i spremite rezultirajuće stanje za sljedeći zahtjev. Direktorij kolačića mora biti pisiv 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 poslužitelju.

Spremanje treba mjesto u životnom ciklusu zahtjeva

libcurl obično zapisuje staklenku tijekom čišćenja ručke. Ako aplikacija treba izričitu točku spremanja nakon udaljene razmjene, može zatražiti:

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

Ovo zapisuje kolačiće koje ručka trenutačno zna u njenu konfiguriranu staklenku. Završite korištenje ručke za tu sesiju prije nego je dodijelite nepovezanom radu. Promjena samo putanje staklenke na ručki koja već drži Aliciine kolačiće nije jednaka stvaranju Bobove čiste sesije.

Također razlikujte uspješno preuzimanje od uspješnog zadržavanja. Dokumentacija staklenke za kolačiće napominje da se neuspjeh pisanja tijekom čišćenja ne vraća kao obična pogreš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 staklenku, 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.

Povezani članci