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-ի մաքուր նստաշրջան ստեղծելուն։
Տարբերեք նաև հաջող ներբեռնումը հաջող պահպանումից։ Քուքիների տարայի փաստաթղթերը նշում են, որ մաքրման ընթացքում գրելու ձախողումը չի վերադարձվում որպես սովորական փոխանցման սխալ։ Ստուգեք պանակի սեփականությունը, թույլտվությունները և հավելվածի ախտորոշիչ ելքը, երբ մուտքը աշխատում է մեկ հարցման համար և անհետանում հաջորդում։
Զուգահեռ հարցումները ներմուծում են ևս մեկ սահման։ Երկու աշխատող կարող են բեռնել նույն հին տարան, անկախորեն փոխել իրենց հիշողության վիճակը և ապա պահել տարբեր արդյունքներ։ Մեկ նստաշրջանի կողպեքը կամ համարժեք հաջորդականացումը պետք է ծածկի ամբողջ բեռնման, փոխանակման և պահման հաջորդականությունը, եթե երկու հարցումները կիսում են մեկ հեռավոր մուտք. միայն վերջնական գրառումը կողպելը չի հաշտեցնում նրանց ավելի վաղ պատկերները։ Տարբեր նստաշրջանները պետք է ունենան տարբեր ֆայլեր և անկախ կողպեքներ։
Ելքի պահին ավարտեք նախատեսված հեռավոր նստաշրջանը և հեռացրեք նրա տեղական քուքիների վիճակը հավելվածի քաղաքականության համաձայն։ Նոր ընտրված պրոքսին այնուհետև կարող է կցվել ցանկացած նոր նստաշրջանի, որը օգտվողը սկսում է, առանց պրոքսիի հասցեին վստահելու որոշումը, թե ում մուտքն է հիշողության մեջ։