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-ის სუფთა სესიის შექმნას.

ასევე განასხვავეთ წარმატებული ჩამოტვირთვა წარმატებული შენარჩუნებისგან. ქუქი-ქილის დოკუმენტაცია აღნიშნავს, რომ გასუფთავების დროს ჩაწერის წარუმატებლობა არ ბრუნდება როგორც ჩვეულებრივი გადაცემის შეცდომა. შეამოწმეთ დირექტორიის საკუთრება, ნებართვები და აპლიკაციის დიაგნოსტიკური გამოსავალი, როცა შესვლა მუშაობს ერთი მოთხოვნისთვის და ქრება შემდეგზე.

პარალელური მოთხოვნები შემოაქვს კიდევ ერთ საზღვარს. ორმა მუშამ შეიძლება ჩატვირთოს იგივე ძველი ქილა, დამოუკიდებლად შეცვალოს თავისი მეხსიერების მდგომარეობა და შემდეგ შეინახოს განსხვავებული შედეგები. სესიისეული ბლოკირება ან ეკვივალენტური სერიალიზაცია უნდა ფარავდეს ჩატვირთვის, გაცვლისა და შენახვის მთელ მიმდევრობას, თუ ორივე მოთხოვნა იზიარებს ერთ დისტანციურ შესვლას; მხოლოდ საბოლოო ჩაწერის ბლოკირება არ ათანხმებს მათ ადრინდელ სნეპშოტებს. სხვადასხვა სესიას უნდა ჰქონდეს სხვადასხვა ფაილი და დამოუკიდებელი საკეტები.

გასვლისას დაასრულეთ განზრახული დისტანციური სესია და გააუქმეთ მისი ლოკალური ქუქის მდგომარეობა აპლიკაციის პოლიტიკის მიხედვით. ახლად არჩეული პროქსი შემდეგ შეიძლება დაუკავშირდეს ნებისმიერ ახალ სესიას, რომელსაც მომხმარებელი იწყებს, ისე რომ პროქსის მისამართი არ განსაზღვრავდეს, ვისი შესვლაა მეხსიერებაში.

დაკავშირებული სტატიები