PHP เซสชันทำงานอย่างไร (ไม่ใช่“ ใช้อย่างไร”)


127

ไฟล์เซสชั่นจะถูกเก็บไว้ในการพูดบนเซิร์ฟเวอร์และตั้งชื่อ/tmp/ sess_{session_id}ฉันดูเนื้อหาแล้วและคิดไม่ออกว่ามันทำงานอย่างไร

การเรียกชื่อตัวแปรและเนื้อหาจากไฟล์นั้นทำได้ง่าย แต่ PHP รู้ได้อย่างไรว่าเซสชันใดเป็นของใคร?

session_id ดูเหมือนสุ่มโดยสิ้นเชิงและที่อยู่ IP หนึ่งสามารถมีผู้ใช้หลายคนและผู้ใช้แต่ละคนสามารถมีหลายเซสชันได้หากเปิดหน้าต่างเบราว์เซอร์มากกว่าหนึ่งหน้าต่าง

แล้วมันทำงานอย่างไร?


คำตอบ:


203

ในสถานการณ์ทั่วไป:

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

ข้อมูลในแฟ้มการประชุมเป็นเนื้อหาของ$_SESSIONอันดับ(เช่นแสดงเป็นสตริง - มีฟังก์ชั่เช่นอันดับ ) ; และไม่ต่ออนุกรมเมื่อไฟล์ถูกโหลดโดย PHP เพื่อเติมข้อมูลใน$_SESSIONอาร์เรย์


บางครั้งรหัสเซสชันไม่ได้ถูกเก็บไว้ในคุกกี้ แต่ถูกส่งใน URL ด้วยเช่นกัน แต่ในปัจจุบันนี้ค่อนข้างหายาก


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

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


5
อุปกรณ์เคลื่อนที่ (จากแอปเนทีฟ) จัดการเซสชันตามปกติอย่างไร การจัดเก็บรหัสเซสชัน? หรือนี่คือ OAuth มาพร้อมกัน
Adam Waite

14

PHP Session ทำงานอย่างไร

  • ประการแรก PHP สร้างหมายเลขประจำตัวที่ไม่ซ้ำกันยาว 16 ไบต์ (จัดเก็บเป็นสตริงของอักขระเลขฐานสิบหก 32 ตัวเช่นa86b10aeb5cd56434f8691799b1d9360) สำหรับแต่ละเซสชัน

  • คุกกี้ PHPSESSID จะส่งหมายเลขประจำตัวที่ไม่ซ้ำกันนั้นไปยังเบราว์เซอร์ของผู้ใช้เพื่อบันทึกหมายเลขนั้น

  • ไฟล์ใหม่ถูกสร้างขึ้นบนเซิร์ฟเวอร์ด้วยชื่อเดียวกันของหมายเลขประจำตัวที่ไม่ซ้ำกันพร้อมคำนำหน้า sess_ (เช่นsess_a86b10aeb5cd56434f8691799b1d9360.)

  • เบราว์เซอร์ส่งคุกกี้นั้นไปยังเซิร์ฟเวอร์พร้อมกับคำขอแต่ละรายการ

  • หาก PHP ได้รับหมายเลขประจำตัวที่ไม่ซ้ำกันจากคุกกี้ PHPSESSID (ตามคำขอแต่ละรายการ) PHP จะค้นหาในไดเรกทอรีชั่วคราวและเปรียบเทียบตัวเลขนั้นกับชื่อไฟล์ หากทั้งสองเหมือนกันระบบจะดึงเซสชันที่มีอยู่มิฉะนั้นจะสร้างเซสชันใหม่สำหรับผู้ใช้นั้น

เซสชันจะถูกทำลายเมื่อผู้ใช้ปิดเบราว์เซอร์หรือออกจากไซต์ เซิร์ฟเวอร์ยังยุติเซสชันหลังจากหมดระยะเวลาเซสชันที่กำหนดไว้ล่วงหน้า นี่คือขั้นตอนกลไกง่ายๆที่ PHP ใช้จัดการเซสชัน ฉันหวังว่าบทความนี้จะช่วยให้คุณเข้าใจว่า PHP SESSION ทำงานอย่างไร

ดูบทความนี้สำหรับรายละเอียดเพิ่มเติม PHP Session ทำงานอย่างไร


แต่ถ้าผมพูดที่เข้าสู่ระบบเว็บไซต์บาง (aka: ในเซสชั่น) mysite.com/cartและเปิดแท็บใหม่ ฉันจะได้รับข้อความ "สวัสดีโจโด 5 ข้อความนี่คือรายการตะกร้าสินค้าของคุณ ... " หรือที่เรียกว่าข้อมูลเซสชัน - แต่ทำไมเบราว์เซอร์ที่เกี่ยวกับแท็บว่างนี้จึงส่ง Session-ID ควบคู่ไปกับ GET-Request? อัปเดตด่วน: อาพบคำตอบ: +)
Frank Nocke

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

4

รหัสเซสชันเป็นแบบสุ่มและถูกส่งผ่านในคุกกี้หรือใน URL ขึ้นอยู่กับการกำหนดค่า คุณอาจเคยเห็น PHPSESSID = xxxx นี้ในบาง URL มีคุกกี้ตามชื่อนั้นด้วย


2

เซสชันใน PHP เริ่มต้นโดยใช้ฟังก์ชัน session_start () เช่นเดียวกับฟังก์ชัน setcookie () ฟังก์ชัน session_start () ต้องอยู่ก่อน HTML ใด ๆ รวมถึงบรรทัดว่างบนหน้า จะมีลักษณะดังนี้: <?php session_start( );?><html><head> ....... etc session_start () ฟังก์ชั่นสร้างรหัสเซสชันแบบสุ่มและเก็บไว้ในคุกกี้บนคอมพิวเตอร์ของผู้ใช้ (นี่เป็นข้อมูลเซสชันเดียวที่เก็บไว้ในฝั่งไคลเอ็นต์จริงๆ ) ชื่อเริ่มต้นของคุกกี้คือ PHPSESSID แม้ว่าจะสามารถเปลี่ยนแปลงได้ในไฟล์การกำหนดค่า PHP บนเซิร์ฟเวอร์ (บริษัท โฮสติ้งส่วนใหญ่จะปล่อยให้มันอยู่คนเดียว) หากต้องการอ้างอิงรหัสเซสชันในโค้ด PHP ของคุณคุณจึงต้องอ้างอิง ตัวแปร $ PHPSESSID (เป็นชื่อคุกกี้จำได้ว่ามาจากคุกกี้?)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.