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׳ס ריינער סעשאָן.
אונטערשיידט אױך אַ געראָטן אַראָפּלאָד פֿון אַ געראָטענער פּערסיסטענץ. די דאָקומענטאַציע פֿון דעם קוקי־געפֿעס באַמערקט אַז אַ שרײַב־פֿעל בעת דער רייניקונג ווערט נישט צוריקגעגעבן ווי אַ געוויינטלעכער איבערגאַנג־פֿעל. פּרוּווט דעם טעקע־באַזיצער, די דערלויבענישן און דער דיאַגנאָסטישער אויסגאַב פֿון דער אַפּליקאַציע ווען אַן אַרײַנלאָג אַרבעט פֿאַר איין בקשה און פֿאַרשווינדט בײַ דער נעקסטער.
פּאַראַלעלע בקשות פֿירן אַרײַן אַן אַנדער גרענעץ. צוויי אַרבעטסקראַפֿטן קענען לאָדן דעם זעלביקן אַלטן געפֿעס, אומאָפּהענגיק ענדערן זייער צושטאַנד אין זכּרון, און דערנאָך שפּאַרן פֿאַרשידענע רעזולטאַטן. אַ שלאָס פּער סעשאָן אָדער אַן עקוויוואַלענטע סעריאַליזאַציע מוז באַדעקן די גאַנצע פֿאָלגע פֿון לאָדן, אויסטויש און שפּאַרן אויב ביידע בקשות טיילן איין ווײַטן אַרײַנלאָג; בלויז פֿאַרשפּאַרן די לעצטע שרײַבונג פֿאַרזינט נישט זייערע פֿריִערדיקע אָנכאַפּן. פֿאַרשידענע סעשאָנס זאָלן האָבן פֿאַרשידענע טעקעס און אומאָפּהענגיקע שלאָסן.
בעת אַרויסצאָלן, פֿאַרענדיקט די געפּלאַנטע ווײַטע סעשאָן און ציט צוריק איר לאָקאַלן קוקי־צושטאַנד לויט דער פּאָליטיק פֿון דער אַפּליקאַציע. אַ נײַ געקליבענער פּראָקси קען דערנאָך ווערן פֿאַרבונדן מיט יעדער נײַער סעשאָן וואָס דער באַניצער הייבט אָן, אָן מאַכן די פּראָקси־אַדרעס פֿאַראַנטוואָרטלעך צו באַשטימען וועמענס אַרײַנלאָג ליגט אין זכּרון.