Прыкладанне 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.

Таксама адрознівайце паспяховае спампоўванне ад паспяховага захавання. Дакументацыя банка цэтлікаў адзначае, што збой запісу падчас ачысткі не вяртаецца як звычайная памылка перадачы. Праверце ўладальніка каталога, дазволы і дыягнастычны вывад прыкладання, калі ўваход працуе для аднаго запыту і знікае ў наступным.

Паралельныя запыты ўводзяць яшчэ адну мяжу. Два працоўнікі могуць загрузіць адзін і той жа стары банк, незалежна змяніць свой стан у памяці і затым захаваць розныя вынікі. Блакіроўка на сеанс або эквівалентная серыялізацыя павінна ахопліваць усю паслядоўнасць загрузкі, абмену і захавання, калі абодва запыты дзеляць адзін аддалены ўваход; блакіроўка толькі фінальнага запісу не ўзгадняе іх папярэднія здымкі. Розныя сеансы павінны мець розныя файлы і незалежныя блакіроўкі.

Пры выхадзе скончыце патрэбны аддалены сеанс і вывідзіце яго лакальны стан цэтлікаў у адпаведнасці з палітыкай прыкладання. Нядаўна выбраны проксі можа затым далучыцца да любога новага сеанса, які пачне карыстальнік, без ускладання на адрас проксі адказнасці за вызначэнне таго, чый уваход знаходзіцца ў памяці.

Падобныя артыкулы