Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

HTTP เป็น stateless ยังไงให้ maintain session ระหว่าง browser และ server

HTTP เป็นโปรโตคอล stateless หมายถึงแต่ละ request แยกจากกัน เซิร์ฟเวอร์ไม่จำสถานะของ client ระหว่าง request ต้องมีกลไกเพื่อ maintain session

วิธีการ Maintain Session

1. Cookies

เซิร์ฟเวอร์ส่ง session ID ผ่าน cookie ไปยังเบราว์เซอร์ Request ถัดไปเบราว์เซอร์ส่ง cookie กลับมา เซิร์ฟเวอร์จึงรู้จัก client

Set-Cookie: JSESSIONID=ABC123; Path=/; HttpOnly

ข้อจำกัด: บราวเซอร์บางตัวปิด cookies, ผู้ใช้ลบ cookies ได้ ไม่แนะนำให้พึ่งพา cookies เพียงอย่างเดียว

2. Hidden Form Fields

ฝัง session ID ใน hidden field ของฟอร์ม

<input type="hidden" name="sessionid" value="12345">

ข้อจำกัด: ทำงานได้เฉพาะ form submit ไม่ทำงานกับ link ธรรมดา (<a href>)

3. URL Rewriting

ต่อ session ID ไปกับทุก URL

https://example.com/page.jsp;jsessionid=ABC123

ข้อได้เปรียบ: ทำงานได้แม้ปิด cookies
ข้อเสีย: ต้อง generate URL ทุกอันแบบ dynamic แม้หน้า static ก็ตาม

4. HttpSession (มาตรฐาน JSP/Servlet)

JSP/Servlet มี API HttpSession จัดการ session ให้อัตโนมัติ (ใช้ cookies หรือ URL rewriting ตามการตั้งค่า)

<%@ page session="true" %>  <!-- ค่าเริ่มต้น -->
<%
    session.setAttribute("user", "Somchai");
    String name = (String) session.getAttribute("user");
%>

สรุปแนวทางปฏิบัติ

  1. ใช้ HttpSession API เป็นหลัก (ง่ายมาตรฐาน)
  2. ตั้งค่าเซิร์ฟเวอร์ให้รองรับ URL rewriting เป็น fallback (ตอน cookies ปิด)
  3. หลีกเลี่ยง hidden fields สำหรับ session tracking ทั่วไป
  4. ตั้งค่า session timeout ให้เหมาะสม (web.xml <session-timeout>)