Ayrı istifadəçi sessiyaları üçün PHP cURL cookie bankaları
PHP cURL cookie davamlılığını uzaq sessiya ətrafında qurmaq: etibarlı fayl adları, açıq yadda saxlama və paralel sorğular.
PHP tətbiqi Alice və Bob-a xidmət edir və hər ikisi server tərəfli cURL müştərisindən istifadə edərək proksi vasitəsilə eyni uzaq veb sayta çatır. Əgər hər sorğu cookies.txt yükləyirsə, iki istifadəçi eyni uzaq girişi miras ala bilər. Proksı ünvanlarını dəyişmək o faylı ayırmır.
Fayl adını seçməzdən əvvəl cookie sahibini seçin. Adətən bu, tətbiqin məntiqi uzaq sessiyasıdır: yerli istifadəçi, konkret uzaq hesab və lazım olduqda ayrı iş sahəsi. Proksı son nöqtəsi marşrut seçimidir, etibarlı sessiya identifikatoru deyil. Bir neçə istifadəçi bir son nöqtəni paylaşa bilər və son nöqtə çıxışları rotasiya edə bilər.
Eyni sessiyanın bankını yükləyin və saxlayın
Tətbiq öz autentifikasiya olunmuş sessiyasını server tərəfindən yaradılan fayl açarına xəritələsin. Şəxsi cookie qovluğu və etibarlı $sessionKey ilə cURL konfiqurasiyası bu forma alır:
$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,
]);
İctimai vasitəçiyə icazə verən şəbəkədə icazəli ictimai sayt sessiya testi üçün HTTP proksı siyahısı namizəd son nöqtələr təqdim edir. Konfiqurasiya edilmiş proksı autentifikasiyası və ya saxlanılan proksı etimadnaməsi olmayan dəstəkdən istifadə edin və cookie vəziyyətini nəzərdə tutulan sessiyaya təyin edilmiş saxlayın. Bu fraqment dəstəyi konfiqurasiya edir; tətbiq ötürməni yerinə yetirir və nəticəsini adi sorğu axını ilə yoxlayır. COOKIEFILE sessiya üçün əvvəlki cookie-ləri yükləyir. COOKIEJAR dəstəyin saxlanılan cookie-ləri hara yazacağını seçir. Yalnız çıxış faylını təyin etmək əvvəlki girişi yükləmir.
Yeni sessiya faylsız başlaya bilər. Onun ilk ötürməsinə nəzərdə tutulan bank yolu verin, veb saytın cookie-ləri qurmasına icazə verin və yaranan vəziyyəti növbəti sorğu üçün saxlayın. Cookie qovluğu tətbiqin işçisi tərəfindən yazıla bilən olmalı və ictimai olaraq xidmət edilən sənəd ağacından kənarda saxlanmalıdır. Ziyarətçinin təqdim etdiyi istifadəçi adını və ya yolu fayl adına çevirməyin; etibarlı açarı serverdə axtarın.
Saxlama sorğu həyat dövründə yer tələb edir
libcurl adətən bankı dəstəyin təmizlənməsi zamanı yazır. Əgər tətbiq uzaq mübadilədən sonra açıq saxlama nöqtəsinə ehtiyac duyursa, bunu tələb edə bilər:
curl_setopt($ch, CURLOPT_COOKIELIST, 'FLUSH');
Bu, dəstəyin hazırda bildiyi cookie-ləri onun konfiqurasiya edilmiş bankına yazır. Dəstəyi həmin sessiya üçün istifadə etməyi bitirin, sonra onu əlaqəsiz işə təyin edin. Artıq Alice-in cookie-lərini saxlayan dəstəkdə yalnız bank yol adını dəyişmək Bob-un təmiz sessiyasını yaratmağa bərabər deyil.
Həmçinin uğurlu yükləməni uğurlu davamlılıqdan ayırın. Cookie bankı sənədləşməsi qeyd edir ki, təmizləmə zamanı yazma xətası adi ötürmə xətası kimi qaytarılmır. Giriş bir sorğu üçün işləyib növbətidə itəndə qovluq sahibliyini, icazələri və tətbiqin diaqnostik çıxışını yoxlayın.
Paralel sorğular başqa bir sərhəd yaradır. İki işçi eyni köhnə bankı yükləyə, yaddaşdakı vəziyyətlərini ayrıca dəyişə və sonra fərqli nəticələr saxlaya bilər. Əgər hər iki sorğu bir uzaq girişi paylaşırsa, sessiya üzrə kilid və ya ekvivalent sıralama bütün yükləmə, mübadilə və saxlama ardıcıllığını əhatə etməlidir; yalnız son yazmanı kilidləmək onların əvvəlki anlık görüntülərini uzlaşdırmır. Fərqli sessiyaların fərqli faylları və müstəqil kilidləri olmalıdır.
Çıxış zamanı nəzərdə tutulan uzaq sessiyanı bitirin və onun yerli cookie vəziyyətini tətbiqin siyasətinə uyğun olaraq təqaüdə çıxarın. Yeni seçilmiş proksı sonra istifadəçinin başlatdığı hər hansı yeni sessiyaya qoşula bilər və proksı ünvanı yaddaşda kimin girişinin olduğunu qərar verməkdən azad olur.