จะกำหนดค่าพารามิเตอร์ของเซสชันการเชื่อมต่อระยะไกลของเทอร์มินัลเซิร์ฟเวอร์ได้อย่างไร เซสชัน คำอธิบายการทำงานโดยละเอียดและคำอธิบายกลไก การตั้งเวลารอ

Session (จากภาษาละติน - sessio - การประชุม, ภาษาอังกฤษ - session) คือช่วงเวลาที่ครอบคลุมงานของผู้ใช้บนอินเทอร์เน็ตตั้งแต่วินาทีแรกที่เปิดจนถึง ลิงค์สุดท้าย- คำนวณเป็นความแตกต่างของเวลาระหว่างคำขอเริ่มต้นและคำขอสุดท้าย อย่างไรก็ตาม หน้าสุดท้ายอาจใช้เวลาที่แตกต่างกันในการดูโดยผู้ใช้ ซึ่งทำให้การวัดเวลาระหว่างสองคำขอทำได้ยากขึ้น

เซสชันเกี่ยวข้องกับโปรโตคอล HTTP และคุกกี้อย่างไร

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

เซสชันมีไว้เพื่ออะไร?

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

ขั้นตอนเซสชั่น

เซสชั่นทั้งหมดสามารถแบ่งออกเป็นสามขั้นตอน:

  • การเปิดเซสชัน (เมื่อผู้ใช้เริ่มทำงานกับไซต์เฉพาะ)
  • การบัญชีตัวแปรเซสชัน (เมื่อไปที่หน้าอื่น)
  • สิ้นสุดเซสชั่น

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

เนื่องจาก HTTP เป็นโปรโตคอลไคลเอ็นต์-เซิร์ฟเวอร์ เซสชัน HTTP จึงประกอบด้วยสามเฟส:

  1. ไคลเอนต์สร้างการเชื่อมต่อ TCP (หรือการเชื่อมต่ออื่นหากไม่ได้ใช้การขนส่ง TCP)
  2. ลูกค้าส่งคำขอและรอการตอบกลับ
  3. เซิร์ฟเวอร์ประมวลผลคำขอและส่งคำตอบที่มีรหัสสถานะและข้อมูลที่เกี่ยวข้อง

ตั้งแต่ HTTP/1.1 การเชื่อมต่อจะไม่ปิดหลังจากระยะที่สามเนื่องจากไคลเอ็นต์ได้รับอนุญาตให้เริ่มต้นคำขออื่น นั่นคือสามารถทำซ้ำขั้นตอนที่สองและสามได้

กำลังสร้างการเชื่อมต่อ

เนื่องจาก HTTP เป็นโปรโตคอลไคลเอนต์-เซิร์ฟเวอร์ การเชื่อมต่อจึงถูกสร้างขึ้นโดยไคลเอนต์เสมอ การเปิดการเชื่อมต่อใน HTTP หมายถึงการสร้างการเชื่อมต่อผ่านการขนส่งที่เหมาะสม ซึ่งโดยทั่วไปคือ TCP

ในกรณีของ TCP เป็นพอร์ต เซิร์ฟเวอร์ HTTPตามค่าเริ่มต้น คอมพิวเตอร์จะใช้พอร์ต 80 แม้ว่าพอร์ตอื่นๆ จะใช้กันทั่วไป เช่น 8000 หรือ 8080 URL ของเพจที่จะโหลดประกอบด้วยชื่อโดเมนและพอร์ต ซึ่งอาจไม่สามารถระบุได้หากตรงกับพอร์ตเริ่มต้น

เราหมายถึง:โมเดลไคลเอนต์-เซิร์ฟเวอร์ไม่อนุญาตให้เซิร์ฟเวอร์ส่งข้อมูลไปยังไคลเอนต์โดยไม่ต้องร้องขอข้อมูลนั้นอย่างชัดเจน เพื่อแก้ไขปัญหานี้ นักพัฒนาเว็บจึงใช้ เทคนิคต่างๆ: ping เซิร์ฟเวอร์เป็นระยะโดยใช้ XMLHTTPRequest วัตถุจาวาสคริปต์, HTML WebSockets API หรือโปรโตคอลที่คล้ายกัน

กำลังส่งคำขอของลูกค้า

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

  1. บรรทัดแรกประกอบด้วยวิธีการร้องขอและพารามิเตอร์:
    • เส้นทางไปยังเอกสาร - URL ที่สมบูรณ์โดยไม่ระบุโปรโตคอลและชื่อโดเมน
    • เวอร์ชันโปรโตคอล HTTP
  2. แต่ละบรรทัดต่อมาคือส่วนหัว HTTP และถ่ายทอดข้อมูลบางอย่างไปยังเซิร์ฟเวอร์เกี่ยวกับประเภทของข้อมูลที่ต้องการ (เช่น ภาษาใด ประเภท MIME ใด) หรือคำแนะนำที่เปลี่ยนพฤติกรรมของเซิร์ฟเวอร์ (เช่น ไม่ส่งการตอบกลับ หากอยู่ในแคชอยู่แล้ว) ส่วนหัว HTTP เหล่านี้สร้างบล็อกที่ลงท้ายด้วยบรรทัดว่าง
  3. บล็อกสุดท้ายเป็นทางเลือกและมีข้อมูลเพิ่มเติม ส่วนใหญ่ใช้วิธี 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 ซึ่งแบ่งออกเป็นสามบล็อกที่แตกต่างกัน:

  1. บรรทัดแรกคือบรรทัดสถานะ ซึ่งประกอบด้วยการยืนยันเวอร์ชัน HTTP ที่ใช้และสถานะของคำขอ (และความหมายในรูปแบบที่มนุษย์สามารถอ่านได้)
  2. บรรทัดต่อไปนี้คือส่วนหัว HTTP ที่ให้ข้อมูลเกี่ยวกับข้อมูลที่ถูกส่งแก่ลูกค้า (เช่น ประเภท ขนาด อัลกอริธึมการบีบอัด คำแนะนำในการแคช) เช่นเดียวกับในกรณีคำขอของลูกค้า ส่วนหัว HTTP เหล่านี้จะสร้างบล็อกที่ลงท้ายด้วยบรรทัดว่าง
  3. บล็อกสุดท้ายประกอบด้วยข้อมูล (ถ้ามี)

ตัวอย่างคำตอบ

รับหน้าเว็บสำเร็จ:

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 (เนื้อหาประกอบด้วยหน้ามาตรฐานที่จะแสดงหากลูกค้าไม่สามารถติดตามลิงก์ได้) 301 ย้ายอย่างถาวร

ย้ายถาวร

เอกสารได้ย้ายมาที่นี่


เซิร์ฟเวอร์ 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 หากต้องการบันทึกตัวแปรในเซสชัน คุณต้องกำหนดค่าในอาร์เรย์นี้ให้กับตัวแปร

ในที่สุดเรามาเริ่มใช้ตัวอย่างกัน มันง่ายมาก

เซสชันใน PHP ความหมาย"; ?>

ทีนี้ลองรับค่าจากอาร์เรย์ $_SESSION ในอีกตัวอย่างหนึ่ง

เซสชันใน PHP

โปรดทราบว่าหากในตัวอย่างนี้เราลบฟังก์ชัน session_start() ออกไป เราจะไม่สามารถเข้าถึงข้อมูลในอาร์เรย์ $_SESSION ได้

ฟังก์ชัน session_id()

เมื่อสร้างเซสชันแล้ว คุณจะสามารถเข้าถึงตัวระบุเฉพาะของเซสชันได้โดยอัตโนมัติโดยใช้ฟังก์ชัน session_id() ฟังก์ชันนี้ช่วยให้คุณสามารถตั้งค่าและรับค่า ID เซสชันได้

เซสชันใน PHP

คุณสามารถดูได้ในแถบเครื่องมือนักพัฒนาซอฟต์แวร์ของเบราว์เซอร์ของคุณ (ใน Chrome กด Ctrl + Shift + I จากนั้นคลิก Resources จากนั้นคุณจะพบคุกกี้) โดเมนนี้ถูกกำหนดให้กับ คุกกี้ของเบราว์เซอร์ด้วยชื่อ PHPSESSID และค่าประมาณต่อไปนี้: "7g5df9rkd1hhvr33lq1k6c72p7"

โดยค่า PHPSESSID นั้นเซิร์ฟเวอร์จะกำหนดเบราว์เซอร์ของคุณและทำงานกับชุดตัวแปรที่เกี่ยวข้องซึ่งจะพร้อมใช้งานสำหรับสคริปต์ผ่านอาร์เรย์ $_SESSION ตามที่เขียนไว้ก่อนหน้านี้

ฟังก์ชัน session_name()

แม้ว่าฟังก์ชัน session_id() จะช่วยให้คุณได้รับค่า ID เซสชัน แต่ฟังก์ชัน session_name() ช่วยให้คุณได้รับชื่อเซสชัน

เซสชันใน PHP

อีกครั้งเกี่ยวกับฟังก์ชัน session_start()

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

  • หากผู้ใช้เปิดไซต์เป็นครั้งแรก session_start() จะตั้งค่าคุกกี้บนไคลเอนต์และสร้างที่เก็บข้อมูลชั่วคราวบนเซิร์ฟเวอร์ที่เกี่ยวข้องกับ ID ผู้ใช้
  • ระบุร้านค้าที่เกี่ยวข้องกับ ID ปัจจุบันที่ส่งเข้ามา
  • หากมีข้อมูลอยู่ในที่เก็บข้อมูลบนเซิร์ฟเวอร์ ข้อมูลนั้นจะอยู่ในอาร์เรย์ $_SESSION
  • หาก register_globals จากไฟล์ php.ini เปิดอยู่ องค์ประกอบทั้งหมดของอาร์เรย์ $_SESSION จะกลายเป็นตัวแปรร่วม

ตัวอย่างการใช้งานเซสชัน

ตอนนี้เราจะดูตัวอย่างที่จะทำให้เราทำการทดลองเล็กๆ น้อยๆ กับเซสชันได้

เซสชันใน PHP

เคาน์เตอร์

คุณได้เปิดเพจในเซสชันปัจจุบันครั้งหนึ่ง.

เปิดตัวอย่างใน ">แท็บนี้

งานเซสชันทั้งหมดขึ้นอยู่กับอาร์เรย์ $_SESSION ซึ่งมองเห็นได้ชัดเจนในตัวอย่างนี้

หากคุณปิดหน้าต่างเบราว์เซอร์ เซสชันจะสิ้นสุดและตัวนับของเราจะรีเซ็ตเป็นศูนย์ พฤติกรรมของเซสชันใน PHP นี้สามารถเปลี่ยนแปลงได้ เราจะกลับมาที่ปัญหานี้อีกครั้งในบทความ

การสิ้นสุดเซสชั่น

เพื่อสิ้นสุดเซสชั่นเราต้องการ:

  1. ล้างอาร์เรย์ $_SESSION
  2. ลบที่เก็บข้อมูลชั่วคราวบนเซิร์ฟเวอร์
  3. ลบคุกกี้เซสชั่น

คุณสามารถล้างอาร์เรย์ $_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() ดังตัวอย่างด้านล่าง:

เซสชันใน PHP

จากตัวอย่างนี้ ผู้ใช้ทั้งหมดจะได้รับรหัสเซสชันเดียวกัน

มาดูกันดีกว่า: หากคุณเรียกใช้ตัวอย่างจากส่วนเกี่ยวกับฟังก์ชัน session_name() (นี่คือลิงก์) ในเบราว์เซอร์ที่แตกต่างกัน (เช่น Chrome และ Internet Explorer) แต่ละเบราว์เซอร์ก็จะมีตัวระบุเซสชันเฉพาะของตัวเอง . เบราว์เซอร์จะจัดเก็บคุกกี้แต่ละรายการไว้ในโฟลเดอร์ของตนเอง ดังนั้นฟังก์ชัน session_start() จะอนุญาตให้แต่ละเบราว์เซอร์สร้างตัวระบุเฉพาะของตนเองได้ และด้วยเหตุนี้ พื้นที่เก็บข้อมูลที่ไม่ซ้ำกันจะถูกสร้างขึ้นสำหรับแต่ละเบราว์เซอร์บนเซิร์ฟเวอร์ ดังนั้นตัวอย่างตัวนับ (อันนี้) จะทำงานแยกกันในแต่ละเบราว์เซอร์

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

100) ( session_unset(); session_destroy(); ) ?> เซสชันใน PHP

เคาน์เตอร์หมายเลข 2

เปิดหน้าในเบราว์เซอร์ที่แตกต่างกันครั้งหนึ่ง.

เปิดตัวอย่างใน ">แท็บนี้

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

การตั้งเวลารอ

ตามค่าเริ่มต้น เซสชันจะ "ถ่ายทอดสด" จนกว่าผู้เยี่ยมชมจะปิดหน้าต่างเบราว์เซอร์ นี่เป็นเพราะความจริงที่ว่าฟังก์ชัน session_start() วางคุกกี้ดังกล่าวไว้บนไคลเอนต์

อายุการใช้งานของเซสชันสามารถเปลี่ยนแปลงได้โดยใช้ฟังก์ชัน session_set_cookie_params() นี่คือไวยากรณ์

session_set_cookie_params (อายุการใช้งาน int [, เส้นทางสตริง [, โดเมนสตริง [, บูลปลอดภัย]]])

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

ผลกระทบของฟังก์ชัน session_set_cookie_params() จะมีผลกับช่วงเวลาที่สคริปต์กำลังทำงานอยู่เท่านั้น

นี่คือตัวอย่างการใช้ฟังก์ชันนี้:

เซสชันใน PHP

เคาน์เตอร์หมายเลข 3

มูลค่าตัวนับ:.

เปิดเคาน์เตอร์ใน ">แท็บนี้

ปิดเคาน์เตอร์และปิดเบราว์เซอร์ หลังจากผ่านไป 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;
?>

เคาน์เตอร์


คุณได้เปิดหน้านี้ในเซสชันเบราว์เซอร์ปัจจุบันของคุณ
เวลา
ปิดเบราว์เซอร์ของคุณเพื่อรีเซ็ตตัวนับนี้
คลิกที่นี่เพื่ออัพเดตเพจ!
ในแต่ละช่วงการเปลี่ยนภาพ ตัวนับจะเพิ่มขึ้น 1)

ขอบคุณสำหรับความสนใจของคุณ! ขอให้โชคดีในความพยายามของคุณ!



2024 wisemotors.ru. วิธีนี้ทำงานอย่างไร. เหล็ก. การทำเหมืองแร่ สกุลเงินดิจิทัล