จะกำหนดค่าพารามิเตอร์ของเซสชันการเชื่อมต่อระยะไกลของเทอร์มินัลเซิร์ฟเวอร์ได้อย่างไร เซสชัน คำอธิบายการทำงานโดยละเอียดและคำอธิบายกลไก การตั้งเวลารอ
Session (จากภาษาละติน - sessio - การประชุม, ภาษาอังกฤษ - session) คือช่วงเวลาที่ครอบคลุมงานของผู้ใช้บนอินเทอร์เน็ตตั้งแต่วินาทีแรกที่เปิดจนถึง ลิงค์สุดท้าย- คำนวณเป็นความแตกต่างของเวลาระหว่างคำขอเริ่มต้นและคำขอสุดท้าย อย่างไรก็ตาม หน้าสุดท้ายอาจใช้เวลาที่แตกต่างกันในการดูโดยผู้ใช้ ซึ่งทำให้การวัดเวลาระหว่างสองคำขอทำได้ยากขึ้น
เซสชันเกี่ยวข้องกับโปรโตคอล HTTP และคุกกี้อย่างไร
เซสชันสามารถอธิบายอะไรได้บ้างตามโปรโตคอล HTTP โดยตัวมันเอง โปรโตคอลนี้ไม่มีวิธีการบันทึกสถานะระหว่างการดำเนินการทั้งสอง กล่าวคือ พูดง่ายๆ ก็คือการเปิดเพจหนึ่งแล้วย้ายจากหน้านั้นไปยังอีกเพจหนึ่ง HTTP จะไม่สามารถระบุได้ว่าคำขอทั้งสองเป็นของผู้ใช้คนเดียวกัน และนี่คือวิธีการติดตามพิเศษเพื่อช่วยเหลือ - การจัดการเซสชัน (เซสชันของเรา)
ดังนั้น เมื่อตอบคำถามว่าเซสชันคืออะไร เราสามารถพูดได้ว่าเซสชันนั้นเป็นอ็อบเจ็กต์โลจิคัลเสริมที่อำนวยความสะดวกในการถ่ายโอนข้อมูลระหว่างคำขอ HTTP ที่ต่อเนื่องกันจากผู้ใช้รายหนึ่ง
คุกกี้ เช่นเดียวกับเซสชัน จะจัดเก็บข้อมูลเกี่ยวกับผู้ใช้ในขณะที่เขาสำรวจ หน้าที่แตกต่างกันและปรับปรุงประสิทธิภาพของโปรโตคอล แต่ต่างจากอย่างที่สองตรงที่ข้อมูลถูกจัดเก็บไว้ในไฟล์ชั่วคราวบนเซิร์ฟเวอร์ โดยจะบันทึกลงในคอมพิวเตอร์ของผู้ใช้ในรูปแบบชิ้นส่วนขนาดเล็ก
เซสชันมีไว้เพื่ออะไร?
การใช้เซสชันจะขาดไม่ได้เมื่อทำงานกับไซต์ เช่น ฟอรัม กระดานข้อความ และร้านค้าออนไลน์ เพราะในกรณีนี้ จำเป็นต้องบันทึกข้อมูลเกี่ยวกับผู้ใช้ไว้หลายหน้า
ขั้นตอนเซสชั่น
เซสชั่นทั้งหมดสามารถแบ่งออกเป็นสามขั้นตอน:
- การเปิดเซสชัน (เมื่อผู้ใช้เริ่มทำงานกับไซต์เฉพาะ)
- การบัญชีตัวแปรเซสชัน (เมื่อไปที่หน้าอื่น)
- สิ้นสุดเซสชั่น
เนื่องจากข้อมูลเซสชันถูกเก็บไว้ เซิร์ฟเวอร์ของบุคคลที่สามเป็นการดีที่สุดที่จะไม่เก็บข้อมูลจำนวนมากไว้ในนั้น แต่ควรใช้คุกกี้
เนื่องจาก HTTP เป็นโปรโตคอลไคลเอ็นต์-เซิร์ฟเวอร์ เซสชัน HTTP จึงประกอบด้วยสามเฟส:
- ไคลเอนต์สร้างการเชื่อมต่อ TCP (หรือการเชื่อมต่ออื่นหากไม่ได้ใช้การขนส่ง TCP)
- ลูกค้าส่งคำขอและรอการตอบกลับ
- เซิร์ฟเวอร์ประมวลผลคำขอและส่งคำตอบที่มีรหัสสถานะและข้อมูลที่เกี่ยวข้อง
ตั้งแต่ HTTP/1.1 การเชื่อมต่อจะไม่ปิดหลังจากระยะที่สามเนื่องจากไคลเอ็นต์ได้รับอนุญาตให้เริ่มต้นคำขออื่น นั่นคือสามารถทำซ้ำขั้นตอนที่สองและสามได้
กำลังสร้างการเชื่อมต่อ
เนื่องจาก HTTP เป็นโปรโตคอลไคลเอนต์-เซิร์ฟเวอร์ การเชื่อมต่อจึงถูกสร้างขึ้นโดยไคลเอนต์เสมอ การเปิดการเชื่อมต่อใน HTTP หมายถึงการสร้างการเชื่อมต่อผ่านการขนส่งที่เหมาะสม ซึ่งโดยทั่วไปคือ TCP
ในกรณีของ TCP เป็นพอร์ต เซิร์ฟเวอร์ HTTPตามค่าเริ่มต้น คอมพิวเตอร์จะใช้พอร์ต 80 แม้ว่าพอร์ตอื่นๆ จะใช้กันทั่วไป เช่น 8000 หรือ 8080 URL ของเพจที่จะโหลดประกอบด้วยชื่อโดเมนและพอร์ต ซึ่งอาจไม่สามารถระบุได้หากตรงกับพอร์ตเริ่มต้น
เราหมายถึง:โมเดลไคลเอนต์-เซิร์ฟเวอร์ไม่อนุญาตให้เซิร์ฟเวอร์ส่งข้อมูลไปยังไคลเอนต์โดยไม่ต้องร้องขอข้อมูลนั้นอย่างชัดเจน เพื่อแก้ไขปัญหานี้ นักพัฒนาเว็บจึงใช้ เทคนิคต่างๆ: ping เซิร์ฟเวอร์เป็นระยะโดยใช้ XMLHTTPRequest วัตถุจาวาสคริปต์, HTML WebSockets API หรือโปรโตคอลที่คล้ายกัน
กำลังส่งคำขอของลูกค้า
เมื่อสร้างการเชื่อมต่อแล้ว ตัวแทนผู้ใช้จะสามารถส่งคำขอได้ (ตัวแทนผู้ใช้โดยปกติจะเป็นเว็บเบราว์เซอร์ แต่อาจไม่ใช่) คำขอไคลเอ็นต์คือคำสั่งข้อความที่คั่นด้วย CRLF (ตัวแบ่งบรรทัด) คำขอประกอบด้วยสามช่วงตึก:
- บรรทัดแรกประกอบด้วยวิธีการร้องขอและพารามิเตอร์:
- เส้นทางไปยังเอกสาร - URL ที่สมบูรณ์โดยไม่ระบุโปรโตคอลและชื่อโดเมน
- เวอร์ชันโปรโตคอล HTTP
- แต่ละบรรทัดต่อมาคือส่วนหัว HTTP และถ่ายทอดข้อมูลบางอย่างไปยังเซิร์ฟเวอร์เกี่ยวกับประเภทของข้อมูลที่ต้องการ (เช่น ภาษาใด ประเภท MIME ใด) หรือคำแนะนำที่เปลี่ยนพฤติกรรมของเซิร์ฟเวอร์ (เช่น ไม่ส่งการตอบกลับ หากอยู่ในแคชอยู่แล้ว) ส่วนหัว HTTP เหล่านี้สร้างบล็อกที่ลงท้ายด้วยบรรทัดว่าง
- บล็อกสุดท้ายเป็นทางเลือกและมีข้อมูลเพิ่มเติม ส่วนใหญ่ใช้วิธี POST
ตัวอย่างคำขอ
เราได้รับ หน้าแรกและแจ้งให้เซิร์ฟเวอร์ทราบว่าตัวแทนผู้ใช้ต้องการหน้าเว็บเป็นภาษาฝรั่งเศส หากเป็นไปได้:
GET / HTTP/1.1 โฮสต์: ไซต์ ยอมรับภาษา: fr
ให้ความสนใจกับบรรทัดว่างที่ส่วนท้าย ซึ่งแยกบล็อกข้อมูลออกจากบล็อกส่วนหัว เนื่องจากคำขอไม่มีส่วนหัว Content-Length: HTTP บล็อกข้อมูลจึงว่างเปล่า และเซิร์ฟเวอร์สามารถเริ่มประมวลผลคำขอได้ทันทีที่ได้รับบรรทัดว่าง ซึ่งบ่งชี้จุดสิ้นสุดของส่วนหัว
เราส่งผลการส่งแบบฟอร์ม:
POST /contact_form.php HTTP/1.1 โฮสต์: เว็บไซต์ ความยาวเนื้อหา: 64 ประเภทเนื้อหา: application/x-www-form-urlencoded name=Joe%20User&request=Send%20me%20one%20of%20your%20catalogue
วิธีการขอ
HTTP กำหนดชุดของวิธีการร้องขอที่ระบุการกระทำที่ต้องการบนทรัพยากร แม้ว่าจะเป็นคำนามก็ได้ แต่บางครั้งวิธีการร้องขอเหล่านี้เรียกว่าคำสั่ง HTTP ที่พบบ่อยที่สุด รับคำขอและโพสต์:
- GET ใช้เพื่อขอเนื้อหาของทรัพยากรที่ระบุ คำขอที่ใช้ GET ควรดึงข้อมูลเท่านั้น
- วิธี POST ส่งข้อมูลไปยังเซิร์ฟเวอร์เพื่อให้สามารถเปลี่ยนสถานะได้ วิธีนี้มักใช้กับแบบฟอร์ม HTML
โครงสร้างการตอบกลับจากเซิร์ฟเวอร์
หลังจากที่ตัวแทนที่เชื่อมต่อได้ส่งคำขอ เว็บเซิร์ฟเวอร์จะประมวลผลและส่งการตอบกลับ โดยการเปรียบเทียบกับคำขอของไคลเอนต์ การตอบสนองของเซิร์ฟเวอร์คือคำสั่งข้อความที่คั่นด้วย CRLF ซึ่งแบ่งออกเป็นสามบล็อกที่แตกต่างกัน:
- บรรทัดแรกคือบรรทัดสถานะ ซึ่งประกอบด้วยการยืนยันเวอร์ชัน HTTP ที่ใช้และสถานะของคำขอ (และความหมายในรูปแบบที่มนุษย์สามารถอ่านได้)
- บรรทัดต่อไปนี้คือส่วนหัว HTTP ที่ให้ข้อมูลเกี่ยวกับข้อมูลที่ถูกส่งแก่ลูกค้า (เช่น ประเภท ขนาด อัลกอริธึมการบีบอัด คำแนะนำในการแคช) เช่นเดียวกับในกรณีคำขอของลูกค้า ส่วนหัว HTTP เหล่านี้จะสร้างบล็อกที่ลงท้ายด้วยบรรทัดว่าง
- บล็อกสุดท้ายประกอบด้วยข้อมูล (ถ้ามี)
ตัวอย่างคำตอบ
รับหน้าเว็บสำเร็จ:
HTTP/1.1 200 ตกลง วันที่: วันเสาร์ที่ 09 ตุลาคม 2553 เวลา 14:28:02 น. GMT เซิร์ฟเวอร์: Apache แก้ไขล่าสุด: วันอังคารที่ 01 ธันวาคม 2552 เวลา 20:18:22 น. GMT ETag: "51142bc1-7449-479b075b2891b" ช่วงที่ยอมรับ: ไบต์ ความยาวเนื้อหา: 29769 ประเภทเนื้อหา: text/html(ที่นี่มา 29,769 ไบต์ของหน้าเว็บที่ร้องขอ)
ข้อความแจ้งว่าทรัพยากรที่ร้องขอถูกย้ายแล้ว:
HTTP/1.1 301 ย้ายเซิร์ฟเวอร์อย่างถาวร: Apache/2.2.3 (Red Hat) ประเภทเนื้อหา: text/html; charset=iso-8859-1 วันที่: วันเสาร์ที่ 09 ต.ค. 2553 เวลา 14:30:24 น. GMT ที่ตั้ง: (นี่คือที่อยู่ใหม่ของทรัพยากรที่ร้องขอ ซึ่งลูกค้าคาดว่าจะร้องขอ) Keep-Alive: หมดเวลา = 15, สูงสุด = 98 ช่วงที่ยอมรับ: ไบต์ผ่าน: Moz-Cache-zlb05 การเชื่อมต่อ: Keep-Alive X-Cache-Info: การแคช X-Cache-Info: การแคชความยาวเนื้อหา: 325 (เนื้อหาประกอบด้วยหน้ามาตรฐานที่จะแสดงหากลูกค้าไม่สามารถติดตามลิงก์ได้)
ย้ายถาวร
เอกสารได้ย้ายมาที่นี่
เซิร์ฟเวอร์ Apache/2.2.3 (Red Hat) ที่ไซต์พอร์ต 80
ข้อความแจ้งว่าไม่มีทรัพยากรที่ร้องขอ:
เซสชันใน PHP เป็นกลไกในการจัดเก็บข้อมูลเกี่ยวกับคอมพิวเตอร์ไคลเอนต์ทางฝั่งเซิร์ฟเวอร์ ที่จริงแล้ว เซสชันใน PHP ไม่ใช่หัวข้อที่ซับซ้อน แต่เพื่อที่จะเข้าใจ คุณจำเป็นต้องรู้ว่าคุกกี้ทำงานอย่างไรใน PHP ดังนั้น หากคุณไม่ทราบว่าคุกกี้ทำงานอย่างไรใน PHP ให้อ่านบทความที่เกี่ยวข้องก่อน จากนั้นจึงกลับมาที่นี่
คำว่า session แปลจากภาษาอังกฤษเป็น session ดังนั้นความหมายของ sessions ใน PHP จึงชัดเจนยิ่งขึ้น แต่โปรแกรมเมอร์ได้นำคำว่า "sessions" มาใช้ และเราจะใช้ในบทความนี้
เซสชันใน PHP นั้นคล้ายคลึงกับกลไกของคุกกี้มาก โดยมีคู่คีย์ => ค่าเดียวกัน เพียงแต่เก็บไว้ที่ฝั่งเซิร์ฟเวอร์เท่านั้น
ฟังก์ชัน session_start()
เราจำเป็นต้องเริ่มเซสชัน เพราะมีฟังก์ชัน session_start() ฟังก์ชันนี้จะเริ่มเซสชันหรือเซสชัน อะไรก็ตามที่คุณต้องการเรียก
ขอแนะนำให้เรียกใช้ฟังก์ชัน session_start() ที่จุดเริ่มต้นของหน้า แต่ในตัวอย่างของฉัน ฉันไม่ทำเช่นนี้
อาร์เรย์ $_SESSION
เซสชันคือกลุ่มของตัวแปรที่จัดเก็บไว้ในเซิร์ฟเวอร์ แต่เกี่ยวข้องกับผู้เยี่ยมชมที่ไม่ซ้ำรายเดียว นี่เป็นประเด็นสำคัญอีกครั้ง: เซสชันจะถูกเก็บไว้บนเซิร์ฟเวอร์.
เพื่อให้แน่ใจว่ามีปฏิสัมพันธ์ของผู้เยี่ยมชมแต่ละคนกับข้อมูลของเขาจากเซสชันของเขา เราจึงใช้ คุกกี้คำสั่งในการสร้างสิ่งที่ PHP ให้มานั้น คุณไม่จำเป็นต้องกังวลเกี่ยวกับมัน คุกกี้นี้เกี่ยวข้องกับเซิร์ฟเวอร์เท่านั้นและไม่สามารถใช้เพื่อรับข้อมูลผู้ใช้ได้
บนเซิร์ฟเวอร์ ข้อมูลเซสชันจะถูกเก็บไว้ ไฟล์ข้อความและมีอยู่ในโปรแกรม PHP ในอาร์เรย์ $_SESSION หากต้องการบันทึกตัวแปรในเซสชัน คุณต้องกำหนดค่าในอาร์เรย์นี้ให้กับตัวแปร
ในที่สุดเรามาเริ่มใช้ตัวอย่างกัน มันง่ายมาก
ทีนี้ลองรับค่าจากอาร์เรย์ $_SESSION ในอีกตัวอย่างหนึ่ง
โปรดทราบว่าหากในตัวอย่างนี้เราลบฟังก์ชัน session_start() ออกไป เราจะไม่สามารถเข้าถึงข้อมูลในอาร์เรย์ $_SESSION ได้
ฟังก์ชัน session_id()
เมื่อสร้างเซสชันแล้ว คุณจะสามารถเข้าถึงตัวระบุเฉพาะของเซสชันได้โดยอัตโนมัติโดยใช้ฟังก์ชัน session_id() ฟังก์ชันนี้ช่วยให้คุณสามารถตั้งค่าและรับค่า ID เซสชันได้
คุณสามารถดูได้ในแถบเครื่องมือนักพัฒนาซอฟต์แวร์ของเบราว์เซอร์ของคุณ (ใน Chrome กด Ctrl + Shift + I จากนั้นคลิก Resources จากนั้นคุณจะพบคุกกี้) โดเมนนี้ถูกกำหนดให้กับ คุกกี้ของเบราว์เซอร์ด้วยชื่อ PHPSESSID และค่าประมาณต่อไปนี้: "7g5df9rkd1hhvr33lq1k6c72p7"
โดยค่า PHPSESSID นั้นเซิร์ฟเวอร์จะกำหนดเบราว์เซอร์ของคุณและทำงานกับชุดตัวแปรที่เกี่ยวข้องซึ่งจะพร้อมใช้งานสำหรับสคริปต์ผ่านอาร์เรย์ $_SESSION ตามที่เขียนไว้ก่อนหน้านี้
ฟังก์ชัน session_name()
แม้ว่าฟังก์ชัน session_id() จะช่วยให้คุณได้รับค่า ID เซสชัน แต่ฟังก์ชัน session_name() ช่วยให้คุณได้รับชื่อเซสชัน
อีกครั้งเกี่ยวกับฟังก์ชัน session_start()
ตอนนี้เรารู้มากขึ้นเกี่ยวกับวิธีการทำงานของเซสชันใน PHP และเราต้องกลับสู่ฟังก์ชัน session_start() อีกครั้ง ฟังก์ชันนี้เริ่มต้นกลไกเซสชันสำหรับผู้ใช้ปัจจุบัน สิ่งนี้เกิดขึ้นได้อย่างไร:
- หากผู้ใช้เปิดไซต์เป็นครั้งแรก session_start() จะตั้งค่าคุกกี้บนไคลเอนต์และสร้างที่เก็บข้อมูลชั่วคราวบนเซิร์ฟเวอร์ที่เกี่ยวข้องกับ ID ผู้ใช้
- ระบุร้านค้าที่เกี่ยวข้องกับ ID ปัจจุบันที่ส่งเข้ามา
- หากมีข้อมูลอยู่ในที่เก็บข้อมูลบนเซิร์ฟเวอร์ ข้อมูลนั้นจะอยู่ในอาร์เรย์ $_SESSION
- หาก register_globals จากไฟล์ php.ini เปิดอยู่ องค์ประกอบทั้งหมดของอาร์เรย์ $_SESSION จะกลายเป็นตัวแปรร่วม
ตัวอย่างการใช้งานเซสชัน
ตอนนี้เราจะดูตัวอย่างที่จะทำให้เราทำการทดลองเล็กๆ น้อยๆ กับเซสชันได้
เคาน์เตอร์
คุณได้เปิดเพจในเซสชันปัจจุบัน=$_SESSION["count"]?>ครั้งหนึ่ง.
เปิดตัวอย่างใน ">แท็บนี้
งานเซสชันทั้งหมดขึ้นอยู่กับอาร์เรย์ $_SESSION ซึ่งมองเห็นได้ชัดเจนในตัวอย่างนี้
หากคุณปิดหน้าต่างเบราว์เซอร์ เซสชันจะสิ้นสุดและตัวนับของเราจะรีเซ็ตเป็นศูนย์ พฤติกรรมของเซสชันใน PHP นี้สามารถเปลี่ยนแปลงได้ เราจะกลับมาที่ปัญหานี้อีกครั้งในบทความ
การสิ้นสุดเซสชั่น
เพื่อสิ้นสุดเซสชั่นเราต้องการ:
- ล้างอาร์เรย์ $_SESSION
- ลบที่เก็บข้อมูลชั่วคราวบนเซิร์ฟเวอร์
- ลบคุกกี้เซสชั่น
คุณสามารถล้างอาร์เรย์ $_SESSION ได้โดยใช้ฟังก์ชัน session_unset()
ฟังก์ชัน session_destroy() จะลบที่เก็บข้อมูลชั่วคราวบนเซิร์ฟเวอร์ ยังไงก็ตามเธอไม่ได้ทำอะไรอีกแล้ว
คุณต้องลบคุกกี้เซสชันโดยใช้ฟังก์ชัน setcookie() ซึ่งเราได้เรียนรู้ในบทเรียนเกี่ยวกับการทำงานกับคุกกี้ใน PHP
ตัวอย่างการสิ้นสุดเซสชั่น:
เซสชั่นสิ้นสุดลงแล้ว
ตอนนี้คุณสามารถทำการทดสอบได้: รันตัวอย่างด้วยตัวนับในหน้าต่างเดียว เพิ่มตัวนับ จากนั้นรันตัวอย่างโดยลบเซสชันและรีเฟรชเพจด้วยตัวนับอีกครั้ง
คุณสามารถลบไฟล์คุกกี้ได้ดังนี้:
setcookie(session_name(), "", เวลา() - 60*60*24*32, "/")
อีกครั้งเกี่ยวกับฟังก์ชัน session_name() และ session_id()
ในทางปฏิบัติไม่ค่อยมีการใช้ฟังก์ชัน session_name() และ session_id() แต่ฉันเขียนเกี่ยวกับฟังก์ชันเหล่านี้เพราะบทความนี้จำเป็นต้องเปิดเผยกลไกการทำงานของเซสชันใน PHP
คุณสามารถใช้ฟังก์ชันเหล่านี้เพื่อกำหนดชื่อเซสชันและ ID ของคุณเองได้ แต่ไม่แนะนำ หากคุณต้องการตั้งค่า ให้เขียนฟังก์ชันเหล่านี้พร้อมอาร์กิวเมนต์ก่อนฟังก์ชัน session_start() ดังตัวอย่างด้านล่าง:
จากตัวอย่างนี้ ผู้ใช้ทั้งหมดจะได้รับรหัสเซสชันเดียวกัน
มาดูกันดีกว่า: หากคุณเรียกใช้ตัวอย่างจากส่วนเกี่ยวกับฟังก์ชัน session_name() (นี่คือลิงก์) ในเบราว์เซอร์ที่แตกต่างกัน (เช่น Chrome และ Internet Explorer) แต่ละเบราว์เซอร์ก็จะมีตัวระบุเซสชันเฉพาะของตัวเอง . เบราว์เซอร์จะจัดเก็บคุกกี้แต่ละรายการไว้ในโฟลเดอร์ของตนเอง ดังนั้นฟังก์ชัน session_start() จะอนุญาตให้แต่ละเบราว์เซอร์สร้างตัวระบุเฉพาะของตนเองได้ และด้วยเหตุนี้ พื้นที่เก็บข้อมูลที่ไม่ซ้ำกันจะถูกสร้างขึ้นสำหรับแต่ละเบราว์เซอร์บนเซิร์ฟเวอร์ ดังนั้นตัวอย่างตัวนับ (อันนี้) จะทำงานแยกกันในแต่ละเบราว์เซอร์
หากคุณตั้งค่า ID เซสชันเดียวกันสำหรับผู้ใช้ทั้งหมด ผู้ใช้เหล่านั้นจะทำงานกับพื้นที่จัดเก็บข้อมูลเดียวกันบนเซิร์ฟเวอร์ นี่คือตัวอย่างตัวนับที่จะนับการเข้าชมจากเบราว์เซอร์ต่างๆ:
100) ( session_unset(); session_destroy(); ) ?>
เคาน์เตอร์หมายเลข 2
เปิดหน้าในเบราว์เซอร์ที่แตกต่างกัน=$_SESSION["count"]?>ครั้งหนึ่ง.
เปิดตัวอย่างใน ">แท็บนี้
หากคุณเรียกใช้ตัวอย่างนี้ คุณจะเห็นสิ่งนั้นไม่ได้ ผู้เยี่ยมชมรายอื่นอาจเปลี่ยนแปลงค่าในที่เก็บเซสชันบนเซิร์ฟเวอร์แล้ว ฉันไม่รู้ว่าในกรณีนี้เซิร์ฟเวอร์จะลบพื้นที่เก็บข้อมูลเมื่อใด ดังนั้นหากตัวนับเกิน 100 ฉันจะสิ้นสุดเซสชัน
การตั้งเวลารอ
ตามค่าเริ่มต้น เซสชันจะ "ถ่ายทอดสด" จนกว่าผู้เยี่ยมชมจะปิดหน้าต่างเบราว์เซอร์ นี่เป็นเพราะความจริงที่ว่าฟังก์ชัน session_start() วางคุกกี้ดังกล่าวไว้บนไคลเอนต์
อายุการใช้งานของเซสชันสามารถเปลี่ยนแปลงได้โดยใช้ฟังก์ชัน session_set_cookie_params() นี่คือไวยากรณ์
session_set_cookie_params (อายุการใช้งาน int [, เส้นทางสตริง [, โดเมนสตริง [, บูลปลอดภัย]]])
ในทางปฏิบัติก็เพียงพอแล้วที่จะใช้เฉพาะพารามิเตอร์แรก (อายุการใช้งาน) ที่นี่คุณจะเขียนเวลาเป็นวินาทีซึ่งกำหนดระยะเวลาที่เซิร์ฟเวอร์ควรจดจำสถานะเซสชันหลังจากปิดเบราว์เซอร์
ผลกระทบของฟังก์ชัน session_set_cookie_params() จะมีผลกับช่วงเวลาที่สคริปต์กำลังทำงานอยู่เท่านั้น
นี่คือตัวอย่างการใช้ฟังก์ชันนี้:
เคาน์เตอร์หมายเลข 3
มูลค่าตัวนับ:=$_SESSION["count"]?>.
เปิดเคาน์เตอร์ใน ">แท็บนี้
ปิดเคาน์เตอร์และปิดเบราว์เซอร์ หลังจากผ่านไป 30 วินาที ให้เปิดตัวอย่างนี้อีกครั้ง เซสชั่นของคุณจะถูกบันทึกไว้
เซสชั่นคืออะไร?
ในเทคโนโลยีคอมพิวเตอร์ โดยเฉพาะอย่างยิ่งในระบบเครือข่าย เซสชันคือการแลกเปลี่ยนข้อมูลเชิงโต้ตอบที่เกือบจะคงที่ หรือที่เรียกว่าการเชื่อมต่อหรือการสนทนาระหว่างอุปกรณ์ที่มีปฏิสัมพันธ์สองเครื่อง หรือระหว่างผู้ใช้กับคอมพิวเตอร์ (ดูหัวข้อ ขั้นตอนการระบุตัวตน) เซสชั่นจะถูกสร้างขึ้นในช่วงเวลาหนึ่งและจะสิ้นสุดลงหลังจากช่วงระยะเวลาหนึ่ง ในระหว่างเซสชันที่กำหนดไว้ จะมีส่งข้อความมากกว่าหนึ่งข้อความในแต่ละทิศทาง โดยทั่วไป เซสชันจะมีเสถียรภาพ กล่าวคือ ฝ่ายโต้ตอบอย่างน้อยหนึ่งฝ่ายจะต้องจัดเก็บข้อมูลเกี่ยวกับประวัติเซสชันเพื่อรักษาความสามารถในการแลกเปลี่ยนข้อมูล ซึ่งตรงข้ามกับการแลกเปลี่ยนแบบไร้สัญชาติ ซึ่งมีสาระสำคัญคือการแลกเปลี่ยนคำขอที่เป็นอิสระ และการตอบสนอง
เซสชันการเชื่อมต่ออาจเป็นส่วนหนึ่งของโปรโตคอลหรือบริการที่ชั้นแอปพลิเคชัน เลเยอร์เซสชัน หรือเลเยอร์การขนส่งของโมเดล OSI
เราเตอร์ใช้ตารางเซสชันเพื่อเก็บข้อมูลเซสชัน ตารางใช้หน่วยความจำและทรัพยากร CPU บางส่วนสำหรับฟังก์ชันต่างๆ เช่น การนับเซสชัน ขนาดเซสชันในตารางได้รับการแก้ไขแล้ว หากโอเวอร์โฟลว์ เราเตอร์จะไม่สามารถส่งข้อมูลได้แม้ว่าจะมีสตรีมข้อมูลเอาท์พุตอยู่ก็ตาม
ลองอธิบายวัตถุประสงค์ของเซสชันโดยใช้ตัวอย่างต่อไปนี้
1. เมื่อคุณเปิดเว็บไซต์ เช่น www. ทุกอย่างจะเกิดขึ้นภายในไม่กี่นาที คุณจึงไม่ต้องกังวลกับความเร็วของการเชื่อมต่ออินเทอร์เน็ต แต่ทำไมจึงต้องมีเซสชันมากมายขนาดนี้? ไซต์นี้มีข้อมูลต่าง ๆ - รูปภาพวิดีโอมากมาย หากต้องการเปิดหน้าเว็บในเบราว์เซอร์ คุณต้องดาวน์โหลดลงในโฟลเดอร์ชั่วคราวในคอมพิวเตอร์ของคุณ
2. เมื่อเราดาวน์โหลดผ่าน BT ต้องใช้เซสชันจำนวนมาก ในระหว่างการเริ่มต้น จำเป็นต้องมีเซสชันประมาณ 2,000 เซสชัน แต่จำนวนเซสชันจะลดลงเมื่อการโหลดมีความเสถียร รายการเซสชันด้านล่างแสดงจำนวนเซสชันปัจจุบันที่ความเร็วในการดาวน์โหลดขาเข้าและขาออกผ่าน BT ที่สอดคล้องกัน
สิ่งนี้จะเกิดขึ้นเมื่อใช้ซอฟต์แวร์ P2P อื่นด้วย เนื่องจากซอฟต์แวร์เหล่านี้ทำงานในลักษณะเดียวกัน
โปรดทราบว่าไม่มีการเชื่อมโยงที่ชัดเจนระหว่างความเร็วและจำนวนเซสชัน หากคุณมีเซสชันจำนวนมาก ความเร็วจะไม่สูงเสมอไป เช่นเดียวกับการมีความเร็วสูงไม่ได้หมายความว่ามีเซสชันจำนวนมาก แต่โดยพื้นฐานแล้ว เมื่อมีหลายเซสชัน ความเร็วก็จะยิ่งมากขึ้น
ทำไมต้องกำหนดขีดจำกัดเซสชั่น?
1) วิธีนี้จะช่วยหลีกเลี่ยงการชะลอตัวของเครือข่ายเนื่องจากซอฟต์แวร์ P2P มีจำนวนเซสชันจำกัด
2) สิ่งนี้ช่วยให้คุณหลีกเลี่ยงการดูดซับทรัพยากรเครือข่ายโดยไวรัสหรือการโจมตีเครือข่ายประเภทอื่นที่ต้องใช้เซสชันจำนวนมาก
วิธีการตั้งค่าการจำกัดเซสชันบนเราเตอร์ทีพี- ลิงค์ ?
ขั้นตอนที่ 1
เปิดเบราว์เซอร์ของคุณและป้อนที่อยู่ IP เครือข่ายของเราเตอร์ในแถบที่อยู่ ค่าเริ่มต้นคือ 192.168.1.1 จากนั้นกด Enter
ขั้นตอนที่ 2
ป้อนชื่อผู้ใช้และรหัสผ่านของคุณเพื่อเข้าสู่เว็บอินเตอร์เฟส ตามค่าเริ่มต้น ทั้งล็อกอินและรหัสผ่านคือผู้ดูแลระบบ
ขั้นตอนที่ 3
คลิก การจำกัดเซสชัน -> การจำกัดเซสชัน ทางด้านซ้ายของหน้า เปิดใช้งานคุณสมบัติการจำกัดเซสชัน จากนั้นคลิกปุ่มบันทึก เพื่อบันทึกการตั้งค่า
ขั้นตอนที่ 4
คลิก เพิ่มใหม่ เพื่อกำหนดค่ากฎการจำกัดเซสชัน ป้อนที่อยู่ IP เครือข่ายของคอมพิวเตอร์ที่คุณต้องการตั้งค่าการจำกัด และตั้งค่าจำนวนเซสชันสูงสุด (เซสชันสูงสุด)
บันทึก
Max Session คือขีดจำกัดส่วนบุคคลสำหรับคอมพิวเตอร์เครื่องใดเครื่องหนึ่ง แม้ว่าคุณจะป้อนอาร์เรย์ของที่อยู่เครือข่ายก็ตาม
เซสชันใน PHP หรือเป็นข้อมูลเกี่ยวกับผู้ใช้หรือลูกค้าที่เยี่ยมชมไซต์จะถูกบันทึกไว้เมื่อย้ายไปมาระหว่างหน้าต่างๆ ของไซต์โดยไม่ยาก บทเรียนมีความสำคัญมาก เกี่ยวข้องกับการสร้างเว็บไซต์ 95%
เซสชันใน php.ini คืออะไร
เซสชันใช้เพื่อจัดเก็บข้อมูลชั่วคราว (เช่น ที่ผู้ใช้ได้เยี่ยมชมไซต์) เมื่อนำทางระหว่างหน้าต่างๆ ของไซต์เดียวกัน เมื่อใช้เซสชัน ข้อมูลจะถูกจัดเก็บไว้ในไฟล์ชั่วคราวบนเซิร์ฟเวอร์ส่วนใหญ่แล้ว เซสชัน (และคุกกี้ด้วย) จะถูกใช้ในการสร้างร้านค้าออนไลน์ กระดานสนทนา กระดานข้อความ เครือข่ายสังคม บล็อก และแหล่งข้อมูลอื่น ๆ ความสะดวกของระบบเซสชันอยู่ที่การจัดเก็บข้อมูลชั่วคราวของผู้ใช้/ลูกค้าที่เข้าสู่ระบบ ซึ่งข้อมูลที่สามารถเข้าถึงได้อย่างรวดเร็วในช่วงเวลาหนึ่ง เซสชันมีวันหมดอายุตามธรรมชาติ - จนกว่าเบราว์เซอร์จะปิด หากคุณปิดเฉพาะเพจ เมื่อคุณเปิดไซต์ ข้อมูลเกี่ยวกับผู้ใช้/ลูกค้าจะยังคงอยู่
ตรรกะของเซสชัน
เซสชัน (หรือเซสชัน) เป็นการจัดเก็บข้อมูลชั่วคราวชนิดหนึ่ง ฉันเตือนคุณทันทีว่าการบันทึกข้อมูลจำนวนเล็กน้อยนั้นคุ้มค่า ตัวอย่างเช่นการเข้าสู่ระบบและรหัสผ่านของผู้ใช้ที่เยี่ยมชมหรือหมายเลขซีเรียลของเขาในฐานข้อมูลตัวอย่างงาน
1.
ผู้ใช้เข้าสู่ระบบและรหัสผ่านและเข้าสู่เว็บไซต์
2.
ข้อมูลที่มีการเข้าสู่ระบบและรหัสผ่านจะถูกบันทึกไว้ในเซสชันของหน้าเว็บไซต์ใดหน้าหนึ่ง:
ไฟล์ ดัชนี.php
Session_start(); // แต่ละไฟล์ที่คุณต้องการใช้ข้อมูลเซสชันจะต้องมีคำสั่ง "เริ่มต้นเซสชัน" ที่จุดเริ่มต้นของโค้ด
$เข้าสู่ระบบ = "ผู้ดูแลระบบ";
$password = "ผ่าน";
$_SESSION["login"] = $login; // บันทึกตัวแปรที่มีการเข้าสู่ระบบ
$_SESSION["รหัสผ่าน"] = $รหัสผ่าน; // บันทึกตัวแปรที่มีรหัสผ่าน
3. เมื่อคุณไปที่หน้าอื่นของไซต์ ข้อมูลนี้จะพร้อมใช้งานด้วย:
ไฟล์ ตัวอย่าง.php(หรือหน้าอื่นๆ)
Echo "ข้อมูลเข้าสู่ระบบของคุณ ".$_SESSION["เข้าสู่ระบบ"]; // จะแสดง "ข้อมูลเข้าสู่ระบบของคุณคือผู้ดูแลระบบ" แม้ว่าเราจะไม่ได้บันทึกข้อมูลใดๆ ในหน้านี้ก็ตาม!
เห็นไหม ง่ายนิดเดียว!
4. หากคุณต้องการล้างข้อมูลเซสชัน ให้ทำดังนี้:
ไฟล์ ตัวอย่าง.php
Session_start(); // "เริ่มเซสชัน" อีกครั้ง
ยกเลิกการตั้งค่า($_SESSION["เข้าสู่ระบบ"]); // นี่คือวิธีที่ตัวแปรไม่ได้ลงทะเบียนหรือ "ทำลาย"
echo "ข้อมูลเข้าสู่ระบบของคุณ ".$_SESSION["เข้าสู่ระบบ"]; // จะแสดง "ข้อมูลเข้าสู่ระบบของคุณ" เนื่องจากเราทำลายมันในบรรทัดสุดท้าย จึงไม่มีข้อมูล
Session_destroy(); // ทำลายเซสชัน ข้อมูลทั้งหมด รวมถึง $_SESSION["password"] ไม่อยู่ที่นั่นอีกต่อไป เมื่อร้องขอจะมีข้อผิดพลาดปรากฏขึ้น
โดยทั่วไป การถ่ายโอนดังกล่าวจะคล้ายกับวิธี POST แต่คุณไม่จำเป็นต้องเขียนโค้ดที่ไม่จำเป็นอีกต่อไป และข้อมูลทั้งหมดที่ถ่ายโอนจากหน้าหนึ่งไปอีกหน้าหนึ่งจะถูกเก็บไว้ในไฟล์ชั่วคราวบนเซิร์ฟเวอร์ ขอย้ำอีกครั้งว่าเซสชันควรมีข้อมูลจำนวนเล็กน้อย ดังนั้นจึงเหมาะสำหรับการจัดเก็บข้อมูลเข้าสู่ระบบ/รหัสผ่าน ตะกร้าสินค้า และปริมาณเล็กน้อยอื่นๆ
การส่งผ่านค่าหรืออาร์เรย์โดยใช้เซสชัน PHP
คุณสามารถเขียนได้ไม่เพียงแต่สตริงเท่านั้น แต่ยังรวมถึงอาร์เรย์ของข้อมูลลงในเซสชันได้ด้วย เพียงอย่าหักโหมจนเกินไปกับโวลุ่มของอาเรย์ เนื่องจากทั้งหมดนี้จะส่งผลต่อความเร็วและพื้นที่ว่างบนเซิร์ฟเวอร์เราใช้หน้าเริ่มต้นที่แน่นอนอีกครั้ง ดัชนี.php
Session_start();
$r = array("หนึ่ง", "สอง", "สาม");
$_SESSION["arr"] = $r;
ไปยังหน้าที่จะแสดงทุกอย่าง
เราบันทึกข้อมูลในเซสชั่นและไปตามลิงก์ไปยังหน้าอื่นซึ่งเราจะแสดงข้อมูลทั้งหมด
ไฟล์ปลายทางเพจ ทดสอบ.phpที่เราเปิดอาร์เรย์
Session_start();
print_r($_SESSION["arr"]);
//จะพิมพ์.
/*
อาร์เรย์
=> หนึ่ง
=> สอง
=> สาม
*/
?>
คุณอาจต้องการทบทวนบทเรียนใน โดยทั่วไปแล้วทุกอย่างควรมีความชัดเจน
ฟังก์ชั่นอื่น ๆ สำหรับการทำงานกับเซสชัน
session_unregister (สตริง)- เซสชันลืมค่าของตัวแปรโกลบอลที่ระบุเซสชั่น_ทำลาย()- เซสชันถูกทำลาย (เช่น หากผู้ใช้ออกจากระบบโดยคลิกปุ่มออก)
session_set_cookie_params (อายุการใช้งาน int [, เส้นทางสตริง [, โดเมนสตริง]])- การใช้ฟังก์ชันนี้คุณสามารถกำหนดระยะเวลาที่เซสชันจะคงอยู่ได้โดยการตั้งค่า unix_timestamp ที่กำหนดเวลาที่เซสชันจะสิ้นสุดลง
รายการฟังก์ชั่นสำหรับการทำงานกับเซสชันใน php
session_cache_expire - ส่งคืนการหมดอายุของแคชปัจจุบัน
session_cache_limiter - รับและ/หรือตั้งค่าตัวจำกัดแคชปัจจุบัน
session_commit เป็นนามแฝงสำหรับ session_write_close()
session_decode - ถอดรหัสข้อมูลเซสชันจากสตริง
session_destroy - ทำลายข้อมูลทั้งหมดที่ลงทะเบียนสำหรับเซสชัน
session_encode - เข้ารหัสข้อมูลเซสชันปัจจุบันเป็นสตริง
session_get_cookie_params - รับพารามิเตอร์คุกกี้เซสชัน
session_id - รับและ/หรือตั้งค่ารหัสเซสชันปัจจุบัน
session_is_registered - กำหนดว่าตัวแปรถูกลงทะเบียนในเซสชันหรือไม่
session_module_name - รับและ/หรือตั้งค่าโมดูลเซสชันปัจจุบัน
session_name - รับและ/หรือตั้งชื่อเซสชันปัจจุบัน
session_regenerate_id - แก้ไขรหัสเซสชันปัจจุบันด้วยรหัสที่สร้างขึ้นใหม่
session_register - ลงทะเบียนตัวแปรตั้งแต่หนึ่งตัวขึ้นไปสำหรับเซสชันปัจจุบัน
session_save_path - รับและ/หรือกำหนดเส้นทางเพื่อบันทึกเซสชันปัจจุบัน
session_set_cookie_params - ตั้งค่าพารามิเตอร์คุกกี้เซสชัน
session_set_save_handler - ตั้งค่าฟังก์ชันการจัดเก็บเซสชันระดับผู้ใช้
session_start - เริ่มต้นข้อมูลเซสชัน
session_unregister - ยกเลิกการลงทะเบียนตัวแปรจากเซสชันปัจจุบัน
session_unset - เผยแพร่ตัวแปรเซสชันทั้งหมด
session_write_close - เขียนข้อมูลเซสชันและสิ้นสุดเซสชัน
ตัวอย่างงานเซสชั่น
การนับจำนวนการดูหน้าเว็บระหว่างเซสชัน ตัวอย่างงานที่ชัดเจน อย่างไรก็ตาม หลังจากปิดเบราว์เซอร์แล้ว การนับถอยหลังจะเริ่มต้นอีกครั้งจำนวนการเข้าชมหนึ่งหน้าภายในหนึ่งเซสชัน
// ตัวอย่างง่ายๆ ของการใช้เซสชันโดยไม่มีคุกกี้
session_name("ทดสอบ");
session_start();
$_SESSION["นับ"] = @$_SESSION["นับ"] + 1;
?>
เคาน์เตอร์
คุณได้เปิดหน้านี้ในเซสชันเบราว์เซอร์ปัจจุบันของคุณ
=$_SESSION["count"]?>เวลา
ปิดเบราว์เซอร์ของคุณเพื่อรีเซ็ตตัวนับนี้
คลิกที่นี่เพื่ออัพเดตเพจ!
ในแต่ละช่วงการเปลี่ยนภาพ ตัวนับจะเพิ่มขึ้น 1)
ขอบคุณสำหรับความสนใจของคุณ! ขอให้โชคดีในความพยายามของคุณ!