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.
Разликувајте и успешно преземање од успешно задржување. Документацијата за теглето за колачиња забележува дека неуспехот при запишување за време на чистењето не се враќа како обична грешка при пренос. Проверете го сопствеништвото на директориумот, дозволите и дијагностичкиот излез на апликацијата кога најавувањето работи за едно барање, а исчезнува при следното.
Паралелните барања воведуваат уште една граница. Двајца работници можат да го вчитаат истото старо тегле, независно да ја променат својата состојба во меморијата и потоа да зачуваат различни резултати. Заклучување по сесија или еквивалентна серијализација мора да ја покрие целата низа на вчитување, размена и зачувување ако двете барања делат едно оддалечено најавување; заклучувањето само на последното запишување не ги усогласува нивните претходни снимки. Различните сесии треба да имаат различни датотеки и независни брави.
При одјавување, завршете ја наменетата оддалечена сесија и повлечете ја нејзината локална состојба на колачиња според политиката на апликацијата. Новоизбраното прокси потоа може да се прикачи на која било нова сесија што корисникот ќе ја започне, без адресата на проксито да одлучува чие најавување е во меморијата.