Aplikasi PHP melayani Alice dan Bob, dan keduanya memakai klien cURL sisi server untuk menjangkau situs web jarak jauh yang sama melalui proksi. Jika setiap permintaan memuat cookies.txt, kedua pengguna dapat mewarisi login jarak jauh yang sama. Mengubah alamat proksi mereka tidak memisahkan berkas itu.

Pilih pemilik kuki sebelum memilih nama berkas. Biasanya itu adalah sesi jarak jauh logis aplikasi: pengguna lokal, akun jarak jauh tertentu, dan bila perlu ruang kerja terpisah. Titik akhir proksi adalah pilihan perutean, bukan pengenal sesi yang andal. Beberapa pengguna dapat berbagi satu titik akhir, dan titik akhir dapat merotasi jalan keluar.

Muat dan simpan toples sesi yang sama

Biarkan aplikasi memetakan sesi terautentikasinya ke kunci berkas yang dibuat server. Dengan direktori kuki privat dan $sessionKey tepercaya, konfigurasi cURL berbentuk seperti ini:

$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,
]);

Untuk uji sesi situs publik yang diizinkan pada jaringan yang memperbolehkan perantara publik, daftar proksi HTTP menyediakan titik akhir kandidat. Gunakan handle tanpa autentikasi proksi terkonfigurasi atau kredensial proksi tersimpan, dan jaga status kuki tetap ditugaskan ke sesi yang dimaksud. Fragmen ini mengonfigurasi handle; aplikasi melakukan transfer dan memeriksa hasilnya melalui alur permintaan normalnya. COOKIEFILE memuat kuki sebelumnya untuk sesi itu. COOKIEJAR memilih tempat handle menulis kuki tersimpannya. Menyetel hanya berkas keluaran tidak memuat login sebelumnya.

Sesi baru dapat dimulai tanpa berkas. Berikan jalur toples yang dimaksud pada transfer pertamanya, biarkan situs menetapkan kuki, dan simpan status yang dihasilkan untuk permintaan berikutnya. Direktori kuki harus dapat ditulis oleh pekerja aplikasi dan dijaga di luar pohon dokumen yang dilayani publik. Jangan mengubah nama pengguna atau jalur yang diberikan pengunjung menjadi nama berkas; cari kunci tepercaya di server.

Penyimpanan memerlukan tempat dalam siklus hidup permintaan

libcurl biasanya menulis toples selama pembersihan handle. Jika aplikasi memerlukan titik simpan eksplisit setelah pertukaran jarak jauh, aplikasi dapat meminta:

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

Ini menulis kuki yang saat ini diketahui handle ke toples terkonfigurasinya. Selesaikan pemakaian handle untuk sesi itu sebelum menugaskannya ke pekerjaan tak terkait. Mengubah hanya jalur toples pada handle yang sudah menyimpan kuki Alice tidak setara dengan membuat sesi Bob yang bersih.

Bedakan juga unduhan yang berhasil dari persistensi yang berhasil. Dokumentasi toples kuki mencatat bahwa kegagalan penulisan selama pembersihan tidak dikembalikan sebagai galat transfer biasa. Periksa kepemilikan direktori, izin, dan keluaran diagnostik aplikasi ketika login berfungsi untuk satu permintaan dan hilang pada permintaan berikutnya.

Permintaan bersamaan memperkenalkan batas lain. Dua pekerja dapat memuat toples lama yang sama, mengubah status di memori secara independen, lalu menyimpan hasil yang berbeda. Kunci per sesi atau serialisasi setara harus mencakup seluruh urutan muat, tukar, dan simpan jika kedua permintaan berbagi satu login jarak jauh; mengunci hanya penulisan terakhir tidak mendamaikan cuplikan sebelumnya. Sesi berbeda semestinya memiliki berkas berbeda dan kunci independen.

Saat keluar, akhiri sesi jarak jauh yang dimaksud dan pensiunkan status kuki lokalnya sesuai kebijakan aplikasi. Proksi yang baru dipilih kemudian dapat dipasang ke sesi baru mana pun yang dimulai pengguna, tanpa membuat alamat proksi bertanggung jawab memutuskan login siapa yang ada di memori.

Artikel terkait