PHP cURL тегле за колачиће за одвојене корисничке сесије
Пројектовање трајности колачића PHP cURL око удаљене сесије: поуздана имена фајлова, експлицитно чување и паралелни захтеви.
PHP апликација услужује Alice и Bob, и обоје користе њен серверски cURL клијент да преко проксија дођу до исте удаљене веб странице. Ако сваки захтев учитава cookies.txt, два корисника могу наследити исто удаљено пријављивање. Промена њихових прокси адреса не раздваја тај фајл.
Изаберите власника колачића пре него што изаберете име фајла. Обично је то логичка удаљена сесија апликације: локални корисник, одређени удаљени налог и, где је потребно, одвојен радни простор. Крајња тачка проксија је избор усмеравања, а не поуздан идентификатор сесије. Неколико корисника може делити једну крајњу тачку, а крајња тачка може ротирати излазе.
Учитајте и сачувајте теглу исте сесије
Нека апликација преслика своју аутентификовану сесију у кључ фајла који генерише сервер. Уз приватни директоријум колачића и поуздан $sessionKey, cURL конфигурација има овај облик:
$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,
]);
За дозвољени тест сесије јавне странице на мрежи која дозвољава јавног посредника, листа HTTP проксија нуди кандидат-крајње тачке. Користите ручку без конфигурисане прокси аутентификације или задржаних прокси акредитива и држите стање колачића додељено намењеној сесији. Овај исечак конфигурише ручку; апликација обавља пренос и проверава резултат кроз свој уобичајени ток захтева. COOKIEFILE учитава претходне колачиће за сесију. COOKIEJAR бира где ручка уписује своје задржане колачиће. Постављање само излазног фајла не учитава претходно пријављивање.
Нова сесија може почети без фајла. Дајте њеном првом преносу намењену путању тегле, пустите страницу да успостави колачиће и сачувајте резултујуће стање за следећи захтев. Директоријум колачића мора бити уписив од стране радника апликације и држати се изван јавно послуженог стабла докумената. Не претварајте корисничко име или путању коју достави посетилац у име фајла; потражите поуздан кључ на серверу.
Чување треба место у животном циклусу захтева
libcurl обично уписује теглу током чишћења ручке. Ако апликацији треба експлицитна тачка чувања после удаљене размене, може затражити:
curl_setopt($ch, CURLOPT_COOKIELIST, 'FLUSH');
Ово уписује колачиће које ручка тренутно зна у њену конфигурисану теглу. Завршите коришћење ручке за ту сесију пре него што је доделите неповезаном раду. Промена само путање тегле на ручки која већ држи Alice-ине колачиће није исто што и стварање Bob-ове чисте сесије.
Такође разликујте успешно преузимање од успешног задржавања. Документација тегле за колачиће напомиње да се неуспех уписа током чишћења не враћа као обична грешка преноса. Проверите власништво директоријума, дозволе и дијагностички излаз апликације када пријављивање ради за један захтев, а нестане у следећем.
Паралелни захтеви уводе још једну границу. Два радника могу учитати исту стару теглу, независно променити своје стање у меморији и затим сачувати различите резултате. Брава по сесији или еквивалентна серијализација мора покрити цео след учитавања, размене и чувања ако оба захтева деле једно удаљено пријављивање; закључавање само завршног уписа не усклађује њихове раније снимке. Различите сесије треба да имају различите фајлове и независне браве.
При одјави завршите намењену удаљену сесију и повуците њено локално стање колачића према политици апликације. Новоизабрани прокси се тада може прикључити било којој новој сесији коју корисник започне, без тога да прокси адреса одлучује чије је пријављивање у меморији.