แอปพลิเคชัน 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

แยกความแตกต่างระหว่างการดาวน์โหลดที่สำเร็จกับการเก็บรักษาที่สำเร็จด้วย เอกสารของขวดคุกกี้ระบุว่าความล้มเหลวในการเขียนระหว่างการล้างจะไม่ถูกส่งกลับเป็นข้อผิดพลาดการถ่ายโอนปกติ ตรวจสอบความเป็นเจ้าของไดเรกทอรี สิทธิ์ และเอาต์พุตการวินิจฉัยของแอปพลิเคชันเมื่อการเข้าสู่ระบบทำงานกับคำขอหนึ่งและหายไปในคำขอถัดไป

คำขอที่เกิดพร้อมกันเพิ่มขอบเขตอีกชั้น ผู้ปฏิบัติงานสองคนอาจโหลดขวดเก่าเดียวกัน เปลี่ยนสถานะในหน่วยความจำของตนอย่างเป็นอิสระ แล้วบันทึกผลลัพธ์ต่างกัน หากคำขอทั้งสองใช้การเข้าสู่ระบบระยะไกลเดียวกัน การล็อกต่อเซสชันหรือการทำให้เป็นลำดับที่เทียบเท่าต้องครอบคลุมลำดับการโหลด แลกเปลี่ยน และบันทึกทั้งหมด การล็อกเฉพาะการเขียนครั้งสุดท้ายไม่ทำให้ภาพรวมก่อนหน้าของพวกเขาสอดคล้องกัน เซสชันที่ต่างกันควรมีไฟล์ต่างกันและมีล็อกที่เป็นอิสระ

เมื่อออกจากระบบ ให้สิ้นสุดเซสชันระยะไกลที่ตั้งใจไว้และปลดระวางสถานะคุกกี้ภายในเครื่องตามนโยบายของแอปพลิเคชัน พร็อกซีที่เลือกใหม่สามารถผูกกับเซสชันใหม่ใดก็ได้ที่ผู้ใช้เริ่ม โดยไม่ให้ที่อยู่พร็อกซีเป็นผู้ตัดสินว่าใครเข้าสู่ระบบอยู่ในหน่วยความจำ

บทความที่เกี่ยวข้อง