PHP cURL -evästepurkit erillisille käyttäjäistunnoille
PHP cURL -evästeiden pysyvyyden suunnittelu etäistunnon ympärille: luotetut tiedostonimet, eksplisiittinen tallennus ja samanaikaiset pyynnöt.
PHP-sovellus palvelee Alicea ja Bobia, ja molemmat käyttävät sen palvelinpuolen cURL-asiakasta päästäkseen samaan etäsivustoon välityspalvelimen kautta. Jos jokainen pyyntö lataa cookies.txt, kaksi käyttäjää voi periä saman etäkirjautumisen. Välityspalvelinosoitteiden vaihtaminen ei erota tätä tiedostoa.
Valitse evästeen omistaja ennen tiedostonimen valintaa. Yleensä se on sovelluksen looginen etäistunto: paikallinen käyttäjä, tietty etätili ja tarvittaessa erillinen työtila. Välityspalvelimen päätepiste on reititysvalinta, ei luotettava istunnon tunniste. Useat käyttäjät voivat jakaa yhden päätepisteen, ja päätepiste voi kierrättää ulostuloja.
Lataa ja tallenna saman istunnon purkki
Anna sovelluksen kartoittaa todennettu istuntonsa palvelimen luomaan tiedostoavaimeen. Yksityisen evästekansion ja luotetun $sessionKey kanssa cURL-asetukset ovat tällaiset:
$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,
]);
Kun testaat sallittua julkisen sivuston istuntoa verkossa, joka sallii julkisen välittäjän, HTTP-välityspalvelinluettelo tarjoaa ehdokaspäätepisteitä. Käytä kahvaa, jossa ei ole määritettyä välityspalvelimen todennusta tai säilytettyjä välityspalvelintietoja, ja pidä evästetila sille tarkoitetulle istunnolle osoitettuna. Tämä katkelma määrittää kahvan; sovellus suorittaa siirron ja tarkistaa tuloksen tavallisessa pyyntövirrassaan. COOKIEFILE lataa istunnon aiemmat evästeet. COOKIEJAR valitsee, mihin kahva kirjoittaa säilytetyt evästeensä. Vain tulostetiedoston asettaminen ei lataa aiempaa kirjautumista.
Uusi istunto voi alkaa ilman tiedostoa. Anna sen ensimmäiselle siirrolle aiottu purkkipolku, anna sivuston muodostaa evästeet ja tallenna syntynyt tila seuraavaa pyyntöä varten. Evästekansion on oltava sovelluksen työntekijän kirjoitettavissa ja pidettävä julkisesti tarjotun asiakirjapuun ulkopuolella. Älä tee kävijän antamasta käyttäjänimestä tai polusta tiedostonimeä; hae luotettu avain palvelimelta.
Tallennus tarvitsee paikan pyynnön elinkaaressa
libcurl kirjoittaa purkin yleensä kahvan siivouksen aikana. Jos sovellus tarvitsee eksplisiittisen tallennuspisteen etävaihdon jälkeen, se voi pyytää:
curl_setopt($ch, CURLOPT_COOKIELIST, 'FLUSH');
Tämä kirjoittaa kahvan tällä hetkellä tuntemat evästeet sen määritettyyn purkkiin. Lopeta kahvan käyttö kyseiselle istunnolle ennen kuin annat sen toissijaiselle työlle. Vain purkin polun vaihtaminen kahvassa, joka jo pitää Alicen evästeitä, ei vastaa Bobin puhtaan istunnon luomista.
Erota myös onnistunut lataus onnistuneesta pysyvyydestä. Evästepurkin dokumentaatio huomauttaa, että siivouksen aikainen kirjoitusvirhe ei palaa tavallisena siirtovirheenä. Tarkista hakemiston omistus, käyttöoikeudet ja sovelluksen diagnostiikkatuloste, kun kirjautuminen toimii yhden pyynnön ajan ja katoaa seuraavassa.
Samanaikaiset pyynnöt tuovat toisen rajan. Kaksi työntekijää voi ladata saman vanhan purkin, muuttaa itsenäisesti muistissa olevaa tilaansa ja tallentaa sitten erilaisia tuloksia. Istuntokohtaisen lukon tai vastaavan sarjallistamisen on katettava koko lataus-, vaihto- ja tallennusjakso, jos molemmat pyynnöt jakavat yhden etäkirjautumisen; vain lopullisen kirjoituksen lukitseminen ei sovita niiden aiempia tilannekuvia. Eri istunnoilla pitäisi olla eri tiedostot ja riippumattomat lukot.
Kirjautuessa ulos lopeta aiottu etäistunto ja poista sen paikallinen evästetila sovelluksen käytännön mukaisesti. Äskettäin valittu välityspalvelin voidaan sitten liittää mihin tahansa uuteen istuntoon, jonka käyttäjä aloittaa, ilman että välityspalvelimen osoite päättää, kenen kirjautuminen on muistissa.