PHP cURL kuketujoj por apartaj uzantaj sesioj
Projektado de PHP cURL kukipersisteco ĉirkaŭ la fora sesio: fidataj dosiernomoj, eksplicita konservado kaj samtempaj petoj.
PHP-a aplikaĵo servas al Alice kaj Bob, kaj ambaŭ uzas ĝian servilflankan cURL-klienton por atingi la saman foran retejon tra prokurilo. Se ĉiu peto ŝargas cookies.txt, la du uzantoj povas heredi la saman foran ensaluton. Ŝanĝi iliajn prokurajn adresojn ne apartigas tiun dosieron.
Elektu la posedanton de la kuketo antaŭ ol elekti la dosiernomon. Kutime ĝi estas la logika fora sesio de la aplikaĵo: loka uzanto, aparta fora konto kaj, kie necese, aparta laborspaco. Prokura finpunkto estas enkursiga elekto, ne fidinda sesiidentigilo. Pluraj uzantoj povas kunhavigi unu finpunkton, kaj finpunkto povas rotacii elirojn.
Ŝargu kaj konservu la tujon de la sama sesio
Lasu la aplikaĵon mapi sian aŭtentikigitan sesion al servile generita dosierŝlosilo. Kun privata kuketa dosierujo kaj fidata $sessionKey, la cURL-agordo havas ĉi tiun formon:
$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,
]);
Por permesita sesiotesto de publika retejo en reto, kiu permesas publikan peranton, la HTTP-prokurila listo liveras kandidatajn finpunktojn. Uzu tenilon sen agordita prokura aŭtentikigo aŭ konservitaj prokuraj akreditaĵoj, kaj tenu la kuketan staton asignita al ĝia celita sesio. Ĉi tiu fragmento agordas tenilon; la aplikaĵo plenumas la transigon kaj kontrolas la rezulton per sia normala peta fluo. COOKIEFILE ŝargas antaŭajn kuketojn por la sesio. COOKIEJAR elektas, kie la tenilo skribas siajn konservitajn kuketojn. Agordi nur la eligdosieron ne ŝargas la antaŭan ensaluton.
Nova sesio povas komenciĝi sen dosiero. Donu al ĝia unua transigo la celitan tujan vojon, lasu la retejon establi la kuketojn, kaj konservu la rezultan staton por la sekva peto. La kuketa dosierujo devas esti skribebla de la laboranto de la aplikaĵo kaj resti ekster la publike servata dokumenta arbo. Ne turnu vizitantan uzantnomon aŭ vojon en dosiernomon; serĉu la fidatan ŝlosilon sur la servilo.
Konservado bezonas lokon en la peta vivociklo
libcurl kutime skribas la tujon dum tenila malplenigo. Se la aplikaĵo bezonas eksplicitan konservpunkton post la fora interŝanĝo, ĝi povas peti:
curl_setopt($ch, CURLOPT_COOKIELIST, 'FLUSH');
Ĉi tio skribas la kuketojn nuntempe konatajn de la tenilo al ĝia agordita tujo. Finu uzi la tenilon por tiu sesio antaŭ ol asigni ĝin al nerilata laboro. Ŝanĝi nur la tujan vojnomon sur tenilo, kiu jam tenas la kuketojn de Alice, ne egalas krei la puran sesion de Bob.
Ankaŭ distingi sukcesan elŝuton disde sukcesa persisteco. La dokumentaro pri kuketujoj notas, ke skriba fiasko dum malplenigo ne revenas kiel ordinara transiga eraro. Kontrolu dosierujan posedon, permesojn kaj la diagnostikan eligon de la aplikaĵo kiam ensaluto funkcias por unu peto kaj malaperas en la sekva.
Samtempaj petoj enkondukas alian limon. Du laborantoj povas ŝargi la saman malnovan tujon, sendepende ŝanĝi sian memoran staton kaj poste konservi malsamajn rezultojn. Sesinivela ŝloso aŭ ekvivalenta serialigo devas kovri la tutan sekvencon de ŝarĝo, interŝanĝo kaj konservado, se ambaŭ petoj kunhavigas unu foran ensaluton; ŝlosi nur la finan skribon ne akordigas iliajn pli fruajn momentbildojn. Malsamaj sesioj devus havi malsamajn dosierojn kaj sendependajn ŝlosojn.
Ĉe elsaluto, finu la celitan foran sesion kaj emeritigu ĝian lokan kuketan staton laŭ la politiko de la aplikaĵo. Lastatempe elektita prokurilo povas tiam aliĝi al ajna nova sesio, kiun la uzanto komencas, sen igi la prokuran adreson respondeca pri decidi kies ensaluto estas en la memoro.