HTTP เป็นโปรโตคอลไร้สัญชาติด้วยเหตุผล เซสชันเชื่อมสถานะลงบน HTTP ในฐานะที่เป็นกฎง่ายๆให้หลีกเลี่ยงการใช้สถานะเซสชัน
UPDATE: ไม่มีแนวคิดของเซสชันที่ระดับ HTTP; เซิร์ฟเวอร์จัดเตรียมสิ่งนี้โดยให้ ID เฉพาะแก่ลูกค้าและแจ้งให้ลูกค้าส่งอีกครั้งในทุกคำขอ จากนั้นเซิร์ฟเวอร์จะใช้ ID นั้นเป็นกุญแจลงใน hashtable ขนาดใหญ่ของวัตถุเซสชัน เมื่อใดก็ตามที่เซิร์ฟเวอร์ได้รับคำขอมันจะค้นหาข้อมูลเซสชันจากแฮชเท็กซ์ของวัตถุเซสชันตาม ID ที่ไคลเอนต์ส่งมาพร้อมกับคำขอ งานพิเศษทั้งหมดนี้เป็นสองเท่าของความสามารถในการปรับขยายได้ (เหตุผลใหญ่ HTTP คือไร้สัญชาติ)
- Whammy One: มันลดงานที่เซิร์ฟเวอร์เดียวทำได้
- Whammy Two: มันยากที่จะขยายออกเพราะตอนนี้คุณไม่สามารถส่งคำขอไปยังเซิร์ฟเวอร์เก่า ๆ - พวกเขาไม่ได้มีเซสชันเดียวกัน คุณสามารถปักหมุดคำขอทั้งหมดด้วย ID เซสชันที่กำหนดไปยังเซิร์ฟเวอร์เดียวกัน นั่นไม่ใช่เรื่องง่ายและเป็นเพียงจุดเดียวของความล้มเหลว (ไม่ใช่สำหรับระบบโดยรวม แต่สำหรับกลุ่มผู้ใช้ของคุณ) หรือคุณสามารถแบ่งปันที่เก็บเซสชันกับเซิร์ฟเวอร์ทั้งหมดในคลัสเตอร์ แต่ตอนนี้คุณมีความซับซ้อนมากขึ้น: หน่วยความจำที่เชื่อมต่อกับเครือข่าย, เซิร์ฟเวอร์เซสชันแบบสแตนด์อะโลนเป็นต้น
จากข้อมูลทั้งหมดที่คุณให้ไว้ในเซสชันยิ่งส่งผลกระทบต่อประสิทธิภาพการทำงานมากขึ้นเท่านั้น (เมื่อ Vinko ชี้ให้เห็น) เช่นเดียวกับที่ Vinko ชี้ให้เห็นถ้าวัตถุของคุณไม่ได้ต่อเนื่องเซสชันจะทำงานผิดปกติ ดังนั้นตามกฎง่ายๆหลีกเลี่ยงการวางมากกว่าที่จำเป็นอย่างยิ่งในเซสชั่น
@Vinko คุณสามารถแก้ไขสถานะการจัดเก็บเซิร์ฟเวอร์ได้โดยการฝังข้อมูลที่คุณกำลังติดตามในการตอบกลับที่คุณส่งกลับมาและให้ลูกค้าส่งอีกครั้งเช่นการส่งข้อมูลลงในอินพุตที่ซ่อนอยู่ หากคุณต้องการการติดตามสถานะเซิร์ฟเวอร์จริง ๆควรเป็นข้อมูลสำรองของคุณ
(Vinko เพิ่ม: PHP สามารถใช้ฐานข้อมูลสำหรับการจัดเก็บข้อมูลเซสชันและการที่ลูกค้าส่งข้อมูลใหม่ทุกครั้งอาจแก้ปัญหาความสามารถในการปรับขนาดได้ แต่เปิดประเด็นความปลอดภัยขนาดใหญ่ที่คุณต้องใส่ใจในตอนนี้ว่าลูกค้ากำลังควบคุมทั้งหมด รัฐของคุณ)