Тусдаа хэрэглэгчийн сессүүдэд зориулсан 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-ийн цэвэр сесс үүсгэхтэй адилгүй.
Мөн амжилттай татаж авалтыг амжилттай хадгалалтаас ялга. Күүки савны баримт бичигт цэвэрлэх үеийн бичих алдаа нь ердийн дамжуулалтын алдаа болж буцахгүй гэж тэмдэглэсэн. Нэг хүсэлтэд нэвтрэлт ажиллаж, дараагийнх нь алга болвол хавтасны эзэмшил, зөвшөөрөл, аппликейшны оношилгооны гаралтыг шалга.
Зэрэгцээ хүсэлтүүд өөр нэг хил нэвтрүүлнэ. Хоёр ажилтан нэг хуучин савыг ачаалж, санах ой дахь төлөвөө бие даан өөрчилж, дараа нь өөр үр дүн хадгалж болно. Хэрэв хоёр хүсэлт нэг алсын нэвтрэлтийг хуваалцвал сесс тус бүрийн түгжээ эсвэл түүнтэй адилтгах дараалал нь ачаалах, солилцох, хадгалах бүх дарааллыг хамарч байх ёстой; зөвхөн эцсийн бичилтийг түгжих нь тэдний өмнөх агшин зурагнуудыг эвлэрүүлэхгүй. Өөр сессүүд өөр файл, бие даасан түгжээтэй байх ёстой.
Гарах үед зориудын алсын сессийг дуусгаж, аппликейшны бодлогын дагуу түүний локал күүки төлөвийг чөлөөл. Шинээр сонгосон прокси дараа нь хэрэглэгчийн эхлүүлсэн аливаа шинэ сесст холбогдож болох бөгөөд прокси хаяг нь санах ойд хэний нэвтрэлт байгааг шийдэх үүрэг хүлээхгүй.