Een PHP-applicatie bedient Alice en Bob, en beiden gebruiken de server-side cURL-client om via een proxy dezelfde externe website te bereiken. Als elk verzoek cookies.txt laadt, kunnen de twee gebruikers dezelfde externe login erven. Het wijzigen van hun proxyadressen scheidt dat bestand niet.

Kies de eigenaar van de cookie voordat je de bestandsnaam kiest. Meestal is dat de logische externe sessie van de applicatie: een lokale gebruiker, een bepaald extern account en, waar nodig, een aparte werkruimte. Een proxy-eindpunt is een routeringskeuze, geen betrouwbare sessie-identificatie. Meerdere gebruikers kunnen één eindpunt delen, en een eindpunt kan uitgangen roteren.

Laad en bewaar de kruik van dezelfde sessie

Laat de applicatie haar geauthenticeerde sessie koppelen aan een door de server gegenereerde bestandssleutel. Met een privémap voor cookies en een vertrouwde $sessionKey heeft de cURL-configuratie deze vorm:

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

Voor een toegestane sessietest op een openbare site in een netwerk dat een openbare tussenpersoon toestaat, levert de HTTP-proxylijst kandidaat-eindpunten. Gebruik een handle zonder geconfigureerde proxyauthenticatie of bewaarde proxyreferenties, en houd de cookiestatus toegewezen aan de bedoelde sessie. Dit fragment configureert een handle; de applicatie voert de overdracht uit en controleert het resultaat via haar normale verzoekstroom. COOKIEFILE laadt eerdere cookies van de sessie. COOKIEJAR kiest waar de handle zijn bewaarde cookies schrijft. Alleen het uitvoerbestand instellen laadt de eerdere login niet.

Een nieuwe sessie kan zonder bestand beginnen. Geef de eerste overdracht het bedoelde kruikpad, laat de website de cookies vestigen en bewaar de resulterende status voor het volgende verzoek. De cookiemap moet schrijfbaar zijn voor de werknemer van de applicatie en buiten de openbaar aangeboden documentboom blijven. Maak van een door een bezoeker aangeleverde gebruikersnaam of pad geen bestandsnaam; zoek de vertrouwde sleutel op de server op.

Opslaan heeft een plaats in de levenscyclus van het verzoek nodig

libcurl schrijft de kruik normaal tijdens het opruimen van de handle. Als de applicatie na de externe uitwisseling een expliciet opslagpunt nodig heeft, kan zij vragen om:

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

Dit schrijft de cookies die de handle momenteel kent naar de geconfigureerde kruik. Rond het gebruik van de handle voor die sessie af voordat je hem aan ongerelateerd werk toewijst. Alleen het kruikpad wijzigen op een handle die al de cookies van Alice bevat, is niet hetzelfde als Bobs schone sessie creëren.

Onderscheid ook een geslaagde download van geslaagde persistentie. De documentatie van de cookiekruik merkt op dat een schrijffout tijdens het opruimen niet als een gewone overdrachtsfout wordt teruggegeven. Controleer mapeigendom, machtigingen en de diagnostische uitvoer van de applicatie wanneer een login voor één verzoek werkt en bij het volgende verdwijnt.

Gelijktijdige verzoeken introduceren een andere grens. Twee werknemers kunnen dezelfde oude kruik laden, onafhankelijk hun status in het geheugen wijzigen en vervolgens verschillende resultaten opslaan. Een slot per sessie of gelijkwaardige serialisatie moet de hele reeks laden, uitwisselen en opslaan dekken als beide verzoeken één externe login delen; alleen de laatste schrijfactie vergrendelen verzoent hun eerdere momentopnamen niet. Verschillende sessies horen verschillende bestanden en onafhankelijke sloten te hebben.

Bij uitloggen beëindig je de bedoelde externe sessie en trek je de lokale cookiestatus in volgens het beleid van de applicatie. Een nieuw gekozen proxy kan dan aan elke nieuwe sessie worden gekoppeld die de gebruiker start, zonder dat het proxyadres bepaalt wiens login in het geheugen staat.

Gerelateerde artikelen