PHP aplikacija opslužuje Alice i Boba, a oboje koriste njen serverski cURL klijent da preko proxyja dođu do iste udaljene web stranice. Ako svaki zahtev učitava cookies.txt, dva korisnika mogu naslediti istu udaljenu prijavu. Promena njihovih proxy adresa ne razdvaja tu datoteku.

Izaberite vlasnika kolačića pre nego što izaberete ime datoteke. Obično je to logička udaljena sesija aplikacije: lokalni korisnik, određeni udaljeni nalog i, gde je potrebno, odvojen radni prostor. Proxy krajnja tačka je izbor usmeravanja, a ne pouzdan identifikator sesije. Nekoliko korisnika može deliti jednu krajnju tačku, a krajnja tačka može rotirati izlaze.

Učitajte i sačuvajte teglu iste sesije

Neka aplikacija preslika svoju autentifikovanu sesiju u ključ datoteke koji generiše server. Uz privatni direktorijum 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 dozvoljeni test sesije javne stranice na mreži koja dozvoljava javnog posrednika, lista HTTP proxyja nudi kandidat-krajnje tačke. Koristite ručku bez konfigurisane proxy autentifikacije ili zadržanih proxy akreditiva i držite stanje kolačića dodeljeno namenjenoj sesiji. Ovaj isečak konfiguriše ručku; aplikacija obavlja prenos i proverava rezultat kroz svoj uobičajeni tok zahteva. COOKIEFILE učitava prethodne kolačiće za sesiju. COOKIEJAR bira gde ručka upisuje 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 prenosu namenjenu putanju tegle, pustite stranicu da uspostavi kolačiće i sačuvajte rezultujuće stanje za sledeći zahtev. Direktorijum kolačića mora biti upisiv od strane aplikacijskog radnika i držan izvan javno posluženog stabla dokumenata. Ne pretvarajte korisničko ime ili putanju koju dostavi posetilac u ime datoteke; potražite pouzdan ključ na serveru.

Čuvanje treba mesto u životnom ciklusu zahteva

libcurl obično upisuje teglu tokom čišćenja ručke. Ako aplikaciji treba eksplicitna tačka čuvanja posle udaljene razmene, može zatražiti:

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

Ovo upisuje kolačiće koje ručka trenutno zna u njenu konfigurisanu teglu. Završite korišćenje ručke za tu sesiju pre nego što je dodelite nepovezanom radu. Promena samo putanje tegle na ručki koja već drži Aliceine kolačiće nije isto što i stvaranje Bobove čiste sesije.

Takođe razlikujte uspešno preuzimanje od uspešnog zadržavanja. Dokumentacija tegle za kolačiće napominje da se neuspeh upisa tokom čišćenja ne vraća kao obična greška prenosa. Proverite vlasništvo direktorijuma, dozvole i dijagnostički izlaz aplikacije kada prijava radi za jedan zahtev, a nestane u sledećem.

Paralelni zahtevi uvode još jednu granicu. Dva radnika mogu učitati istu staru teglu, nezavisno promeniti svoje stanje u memoriji i zatim sačuvati različite rezultate. Brava po sesiji ili ekvivalentna serijalizacija mora pokriti ceo sled učitavanja, razmene i čuvanja ako oba zahteva dele jednu udaljenu prijavu; zaključavanje samo završnog upisa ne usklađuje njihove ranije snimke. Različite sesije treba da imaju različite datoteke i nezavisne brave.

Pri odjavi završite namenjenu udaljenu sesiju i povucite njeno lokalno stanje kolačića prema politici aplikacije. Novoizabrani proxy se tada 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