Balang kuki PHP cURL untuk sesi pengguna berasingan
Mereka bentuk kegigihan kuki PHP cURL di sekeliling sesi jauh: nama fail dipercayai, penyimpanan eksplisit dan permintaan serentak.
Aplikasi PHP melayani Alice dan Bob, dan kedua-duanya menggunakan klien cURL sebelah pelayan untuk mencapai tapak web jauh yang sama melalui proksi. Jika setiap permintaan memuatkan cookies.txt, kedua-dua pengguna boleh mewarisi log masuk jauh yang sama. Menukar alamat proksi mereka tidak memisahkan fail itu.
Pilih pemilik kuki sebelum memilih nama fail. Biasanya ia ialah sesi jauh logik aplikasi: pengguna tempatan, akaun jauh tertentu dan, jika perlu, ruang kerja berasingan. Titik akhir proksi ialah pilihan penghalaan, bukan pengecam sesi yang boleh dipercayai. Beberapa pengguna boleh berkongsi satu titik akhir, dan titik akhir boleh memutar jalan keluar.
Muat dan simpan balang sesi yang sama
Biarkan aplikasi memetakan sesi teruntuknya kepada kunci fail yang dijana pelayan. Dengan direktori kuki peribadi dan $sessionKey yang dipercayai, konfigurasi cURL berbentuk begini:
$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 ujian sesi tapak awam yang dibenarkan pada rangkaian yang membenarkan perantara awam, senarai proksi HTTP menyediakan titik akhir calon. Gunakan pemegang tanpa pengesahan proksi yang dikonfigurasikan atau kelayakan proksi yang disimpan, dan kekalkan keadaan kuki ditetapkan kepada sesi yang dimaksudkan. Fragmen ini mengkonfigurasi pemegang; aplikasi melakukan pemindahan dan menyemak hasilnya melalui aliran permintaan biasa. COOKIEFILE memuatkan kuki terdahulu untuk sesi itu. COOKIEJAR memilih tempat pemegang menulis kuki tersimpannya. Menetapkan fail output sahaja tidak memuatkan log masuk terdahulu.
Sesi baharu boleh bermula tanpa fail. Berikan kepada pemindahan pertamanya laluan balang yang dimaksudkan, biarkan tapak web menetapkan kuki, dan simpan keadaan yang terhasil untuk permintaan seterusnya. Direktori kuki mesti boleh ditulis oleh pekerja aplikasi dan disimpan di luar pokok dokumen yang disajikan secara awam. Jangan jadikan nama pengguna atau laluan yang diberikan pelawat sebagai nama fail; cari kunci yang dipercayai pada pelayan.
Penyimpanan memerlukan tempat dalam kitaran hayat permintaan
libcurl biasanya menulis balang semasa pembersihan pemegang. Jika aplikasi memerlukan titik simpan eksplisit selepas pertukaran jauh, ia boleh meminta:
curl_setopt($ch, CURLOPT_COOKIELIST, 'FLUSH');
Ini menulis kuki yang diketahui oleh pemegang sekarang ke balang yang dikonfigurasikannya. Selesaikan penggunaan pemegang untuk sesi itu sebelum memberikannya kepada kerja yang tidak berkaitan. Menukar hanya laluan balang pada pemegang yang sudah menyimpan kuki Alice tidak sama dengan mencipta sesi bersih Bob.
Bezakan juga muat turun yang berjaya daripada kegigihan yang berjaya. Dokumentasi balang kuki menyatakan bahawa kegagalan menulis semasa pembersihan tidak dikembalikan sebagai ralat pemindahan biasa. Semak pemilikan direktori, kebenaran dan output diagnostik aplikasi apabila log masuk berfungsi untuk satu permintaan dan hilang pada yang seterusnya.
Permintaan serentak memperkenalkan sempadan lain. Dua pekerja boleh memuatkan balang lama yang sama, menukar keadaan dalam ingatan mereka secara berasingan, kemudian menyimpan hasil yang berbeza. Kunci setiap sesi atau penyirian setara mesti meliputi keseluruhan jujukan muat, tukar dan simpan jika kedua-dua permintaan berkongsi satu log masuk jauh; mengunci hanya tulisan akhir tidak mendamaikan petikan terdahulu mereka. Sesi berbeza patut mempunyai fail berbeza dan kunci bebas.
Semasa log keluar, tamatkan sesi jauh yang dimaksudkan dan tarik balik keadaan kuki tempatannya mengikut dasar aplikasi. Proksi yang baru dipilih kemudiannya boleh dilampirkan pada mana-mana sesi baharu yang dimulakan pengguna, tanpa menjadikan alamat proksi bertanggungjawab menentukan log masuk siapa yang ada dalam ingatan.