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");
%>
สรุปแนวทางปฏิบัติ
- ใช้ HttpSession API เป็นหลัก (ง่ายมาตรฐาน)
- ตั้งค่าเซิร์ฟเวอร์ให้รองรับ URL rewriting เป็น fallback (ตอน cookies ปิด)
- หลีกเลี่ยง hidden fields สำหรับ session tracking ทั่วไป
- ตั้งค่า session timeout ให้เหมาะสม (web.xml <session-timeout>)