Una aplicació PHP serveix Alice i Bob, i tots dos utilitzen el seu client cURL del costat del servidor per arribar al mateix lloc web remot a través d'un proxy. Si cada sol·licitud carrega cookies.txt, els dos usuaris poden heretar el mateix inici de sessió remot. Canviar les seves adreces de proxy no separa aquest fitxer.

Trieu el propietari de la galeta abans de triar el nom del fitxer. Normalment és la sessió remota lògica de l'aplicació: un usuari local, un compte remot concret i, quan cal, un espai de treball separat. Un punt final de proxy és una elecció d'encaminament, no un identificador de sessió fiable. Diversos usuaris poden compartir un punt final, i un punt final pot rotar les sortides.

Carregueu i deseu el pot de la mateixa sessió

Deixeu que l'aplicació assigni la seva sessió autenticada a una clau de fitxer generada pel servidor. Amb un directori de galetes privat i un $sessionKey de confiança, la configuració de cURL té aquesta forma:

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

Per a una prova de sessió permesa en un lloc públic en una xarxa que permet un intermediari públic, la llista de proxies HTTP proporciona punts finals candidats. Utilitzeu un manejador sense autenticació de proxy configurada ni credencials de proxy retingudes, i manteniu l'estat de les galetes assignat a la sessió prevista. Aquest fragment configura un manejador; l'aplicació fa la transferència i comprova el resultat pel seu flux normal de sol·licituds. COOKIEFILE carrega les galetes prèvies de la sessió. COOKIEJAR selecciona on el manejador escriu les galetes retingudes. Establir només el fitxer de sortida no carrega l'inici de sessió anterior.

Una sessió nova pot començar sense cap fitxer. Doneu a la seva primera transferència el camí del pot previst, deixeu que el lloc estableixi les galetes i deseu l'estat resultant per a la sol·licitud següent. El directori de galetes ha de ser escribible pel treballador de l'aplicació i s'ha de mantenir fora de l'arbre de documents servit públicament. No convertiu un nom d'usuari o un camí proporcionat pel visitant en un nom de fitxer; cerqueu la clau de confiança al servidor.

El desament necessita un lloc al cicle de vida de la sol·licitud

libcurl normalment escriu el pot durant la neteja del manejador. Si l'aplicació necessita un punt de desament explícit després de l'intercanvi remot, pot sol·licitar:

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

Això escriu les galetes que el manejador coneix actualment al seu pot configurat. Acabeu d'utilitzar el manejador per a aquesta sessió abans d'assignar-lo a feina no relacionada. Canviar només el camí del pot en un manejador que ja conté les galetes d'Alice no equival a crear la sessió neta de Bob.

Distingiu també una descàrrega correcta d'una persistència correcta. La documentació del pot de galetes assenyala que un error d'escriptura durant la neteja no es retorna com un error de transferència ordinari. Comproveu la propietat del directori, els permisos i la sortida de diagnòstic de l'aplicació quan un inici de sessió funciona per a una sol·licitud i desapareix a la següent.

Les sol·licituds concurrents introdueixen una altra frontera. Dos treballadors poden carregar el mateix pot antic, canviar independentment el seu estat en memòria i després desar resultats diferents. Un bloqueig per sessió o una serialització equivalent ha de cobrir tota la seqüència de càrrega, intercanvi i desament si ambdues sol·licituds comparteixen un inici de sessió remot; bloquejar només l'escriptura final no reconcilia les seves instantànies anteriors. Sessions diferents haurien de tenir fitxers diferents i bloquejos independents.

En tancar la sessió, acabeu la sessió remota prevista i retireu el seu estat local de galetes segons la política de l'aplicació. Un proxy recentment seleccionat es pot adjuntar llavors a qualsevol sessió nova que iniciï l'usuari, sense fer que l'adreça del proxy decideixi de qui és l'inici de sessió a la memòria.

Articles relacionats