Bir PHP uygulaması Alice ve Bob'a hizmet ediyor ve ikisi de sunucu tarafındaki cURL istemcisini kullanarak bir proxy üzerinden aynı uzak web sitesine erişiyor. Her istek cookies.txt dosyasını yüklerse, iki kullanıcı aynı uzak oturum açmayı devralabilir. Proxy adreslerini değiştirmek bu dosyayı ayırmaz.

Dosya adını seçmeden önce çerezin sahibini seçin. Genellikle bu, uygulamanın mantıksal uzak oturumudur: yerel bir kullanıcı, belirli bir uzak hesap ve gerektiğinde ayrı bir çalışma alanı. Proxy uç noktası bir yönlendirme tercihidir, güvenilir bir oturum tanımlayıcısı değildir. Birkaç kullanıcı tek bir uç noktayı paylaşabilir ve uç nokta çıkışları döndürebilir.

Aynı oturumun kavanozunu yükleyin ve kaydedin

Uygulamanın kimliği doğrulanmış oturumunu sunucu tarafından üretilen bir dosya anahtarına eşlemesine izin verin. Özel bir çerez dizini ve güvenilir bir $sessionKey ile cURL yapılandırması şu biçimi 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,
]);

Genel bir aracıya izin veren bir ağda izinli bir genel site oturumu testi için HTTP proxy listesi aday uç noktalar sunar. Yapılandırılmış proxy kimlik doğrulaması veya saklanan proxy kimlik bilgileri olmayan bir tutamaç kullanın ve çerez durumunu amaçlanan oturuma atanmış olarak tutun. Bu parça bir tutamaç yapılandırır; transferi uygulama yapar ve sonucu olağan istek akışıyla denetler. COOKIEFILE oturumun önceki çerezlerini yükler. COOKIEJAR tutamacın saklanan çerezlerini nereye yazacağını seçer. Yalnızca çıktı dosyasını ayarlamak önceki oturum açmayı yüklemez.

Yeni bir oturum dosyasız başlayabilir. İlk transferine amaçlanan kavanoz yolunu verin, web sitesinin çerezleri kurmasına izin verin ve ortaya çıkan durumu bir sonraki istek için kaydedin. Çerez dizini uygulamanın çalışanı tarafından yazılabilir olmalı ve herkese açık sunulan belge ağacının dışında tutulmalıdır. Ziyaretçinin sağladığı kullanıcı adını veya yolu dosya adına dönüştürmeyin; güvenilir anahtarı sunucuda arayın.

Kaydetme, istek yaşam döngüsünde bir yer gerektirir

libcurl genellikle kavanozu tutamacın temizliği sırasında yazar. Uygulama uzak alışverişten sonra açık bir kaydetme noktasına ihtiyaç duyuyorsa şunu isteyebilir:

curl_setopt($ch, CURLOPT_COOKIELIST, 'FLUSH');

Bu, tutamacın şu anda bildiği çerezleri yapılandırılmış kavanozuna yazar. O oturum için tutamacı kullanmayı bitirin, ardından onu ilgisiz bir işe atayın. Alice'in çerezlerini zaten tutan bir tutamaçta yalnızca kavanoz yolunu değiştirmek, Bob'un temiz oturumunu oluşturmakla eşdeğer değildir.

Başarılı bir indirmeyi başarılı bir kalıcılıktan da ayırt edin. Çerez kavanozu belgeleri, temizlik sırasındaki bir yazma hatasının olağan bir aktarım hatası olarak döndürülmediğini belirtir. Bir oturum açma bir istek için çalışıp bir sonrakinde kaybolduğunda dizin sahipliğini, izinleri ve uygulamanın tanılama çıktısını denetleyin.

Eşzamanlı istekler başka bir sınır getirir. İki çalışan aynı eski kavanozu yükleyebilir, belleklerindeki durumu bağımsız olarak değiştirebilir ve sonra farklı sonuçlar kaydedebilir. İki istek aynı uzak oturum açmayı paylaşıyorsa, oturum başına kilit veya eşdeğer bir sıralama tüm yükleme, alışveriş ve kaydetme dizisini kapsamalıdır; yalnızca son yazmayı kilitlemek önceki anlık görüntülerini uzlaştırmaz. Farklı oturumların farklı dosyaları ve bağımsız kilitleri olmalıdır.

Çıkışta amaçlanan uzak oturumu sonlandırın ve yerel çerez durumunu uygulamanın politikasına göre emekliye ayırın. Yeni seçilen bir proxy daha sonra kullanıcının başlattığı her yeni oturuma bağlanabilir; proxy adresi bellekte kimin oturum açmış olduğuna karar vermek zorunda kalmaz.

İlgili makaleler