PHP programa aptarnauja Alice ir Bob, ir abu naudoja jos serverio pusės cURL klientą, kad per tarpinį serverį pasiektų tą pačią nuotolinę svetainę. Jei kiekviena užklausa įkelia cookies.txt, abu naudotojai gali paveldėti tą patį nuotolinį prisijungimą. Jų tarpinio serverio adresų pakeitimas to failo neatskiria.

Pasirinkite slapuko savininką prieš pasirinkdami failo pavadinimą. Paprastai tai yra loginė nuotolinė programos sesija: vietinis naudotojas, konkreti nuotolinė paskyra ir, kai reikia, atskira darbo erdvė. Tarpinio serverio galinis taškas yra maršrutizavimo pasirinkimas, o ne patikimas sesijos identifikatorius. Keli naudotojai gali dalytis vienu galiniu tašku, o galinis taškas gali keisti išėjimus.

Įkelkite ir išsaugokite tos pačios sesijos stiklainį

Leiskite programai susieti autentifikuotą sesiją su serverio sugeneruotu failo raktu. Turint privatų slapukų katalogą ir patikimą $sessionKey, cURL konfigūracija atrodo taip:

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

Leidžiamam viešos svetainės sesijos bandymui tinkle, kuriame leidžiamas viešas tarpininkas, HTTP tarpinių serverių sąrašas pateikia kandidatų galinius taškus. Naudokite rankeną be sukonfigūruoto tarpinio serverio autentifikavimo ar saugomų tarpinio serverio kredencialų ir laikykite slapukų būseną priskirtą numatytai sesijai. Šis fragmentas konfigūruoja rankeną; programa atlieka perdavimą ir tikrina rezultatą įprastu užklausų srautu. COOKIEFILE įkelia ankstesnius sesijos slapukus. COOKIEJAR parenka, kur rankena rašo saugomus slapukus. Nustačius tik išvesties failą, ankstesnis prisijungimas neįkeliamas.

Nauja sesija gali prasidėti be failo. Duokite jos pirmajam perdavimui numatytą stiklainio kelią, leiskite svetainei nustatyti slapukus ir išsaugokite gautą būseną kitai užklausai. Slapukų katalogas turi būti rašomas programos darbuotojo ir laikomas už viešai aptarnaujamo dokumentų medžio. Nepaverskite lankytojo pateikto naudotojo vardo ar kelio failo pavadinimu; ieškokite patikimo rakto serveryje.

Išsaugojimui reikia vietos užklausos gyvavimo cikle

libcurl paprastai įrašo stiklainį valydamas rankeną. Jei programai po nuotolinio mainų reikia aiškaus išsaugojimo taško, ji gali paprašyti:

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

Tai įrašo rankenai šiuo metu žinomus slapukus į sukonfigūruotą stiklainį. Baikite naudoti rankeną tai sesijai prieš priskirdami ją nesusijusiam darbui. Pakeitus tik stiklainio kelią rankenoje, kuri jau laiko Alice slapukus, tai nelygu Bob švarios sesijos sukūrimui.

Taip pat atskirkite sėkmingą atsisiuntimą nuo sėkmingo išsaugojimo. Slapukų stiklainio dokumentacija pažymi, kad rašymo klaida valymo metu negrąžinama kaip įprasta perdavimo klaida. Patikrinkite katalogo nuosavybę, leidimus ir programos diagnostikos išvestį, kai prisijungimas veikia vienai užklausai ir dingsta kitoje.

Lygiagrečios užklausos įveda dar vieną ribą. Du darbuotojai gali įkelti tą patį seną stiklainį, nepriklausomai pakeisti savo atminties būseną ir tada išsaugoti skirtingus rezultatus. Užrakta pagal sesiją arba lygiavertis serializavimas turi apimti visą įkėlimo, mainų ir išsaugojimo seką, jei abi užklausos dalijasi vienu nuotoliniu prisijungimu; užrakinus tik galutinį įrašymą, jų ankstesnės kopijos nesuderinamos. Skirtingos sesijos turėtų turėti skirtingus failus ir nepriklausomus užraktus.

Atsijungiant užbaikite numatytą nuotolinę sesiją ir pagal programos politiką atsisakykite jos vietinės slapukų būsenos. Naujai pasirinktas tarpinis serveris tada gali būti prijungtas prie bet kurios naujos sesijos, kurią pradeda naudotojas, nepaliekant tarpinio serverio adresui spręsti, kieno prisijungimas yra atmintyje.

Susiję straipsniai