Kotchasan Framework Documentation
Session Class - การจัดการ Session ผ่านฐานข้อมูล
Session Class - การจัดการ Session ผ่านฐานข้อมูล
คลาส Session ทำหน้าที่จัดการ Session ของระบบ โดยเก็บข้อมูลลงในฐานข้อมูล (Database Session Handler) แทนการเก็บเป็นไฟล์ และยังมีเมธอดสำหรับอ่าน/เขียนข้อมูลใน $_SESSION อย่างง่าย
Namespace
Kotchasan\Sessionการทำงาน
คลาสนี้ถูกออกแบบมาให้ใช้ร่วมกับฟังก์ชัน session_set_save_handler() ของ PHP เพื่อเปลี่ยนการเก็บ Session ไปไว้ในตาราง sessions บนฐานข้อมูล ซึ่งช่วยให้:
- รองรับการทำงานแบบ Load Balancing (หลาย Server ใช้ Database เดียวกัน)
- ปลอดภัยและจัดการง่ายกว่าไฟล์
- สามารถตรวจสอบจำนวนผู้ใช้งานออนไลน์ได้
Public Methods
createTable()
สร้างตารางสำหรับเก็บ Session (เรียกครั้งแรกเมื่อติดตั้ง)
public function createTable(): boolคืนค่า: true ถ้าสร้างสำเร็จ หรือตารางมีอยู่แล้ว
session()
อ่านค่าจาก Session ($_SESSION)
public function session(string $name, mixed $default = null): mixedพารามิเตอร์:
$name- ชื่อ key ของ Session$default- ค่าที่จะคืนกลับหากไม่พบ key นี้ (Default: null)
คืนค่า: ค่าที่เก็บไว้ หรือ $default
ตัวอย่าง:
$user_id = $session->session('user_id', 0);setSession()
บันทึกค่าลง Session ($_SESSION)
public function setSession(string $name, mixed $value): selfพารามิเตอร์:
$name- ชื่อ key$value- ค่าที่ต้องการบันทึก
คืนค่า: คืนค่า Instance ของตัวเอง (Chainable)
ตัวอย่าง:
$session->setSession('user_id', 123)
->setSession('role', 'admin');Internal Methods (Session Handler)
เมธอดเหล่านี้ใช้โดย PHP Session Manager โดยอัตโนมัติ ไม่ควรเรียกใช้โดยตรง:
_open(): เปิดการเชื่อมต่อฐานข้อมูล_close(): ปิด Session_read($sess_id): อ่านข้อมูล Session จาก DB_write($sess_id, $data): บันทึก/อัปเดตข้อมูล Session_destroy($sess_id): ลบ Session ตาม ID_gc($max): ลบ Session ที่หมดอายุ (Garbage Collection)
การตั้งค่าใช้งาน
ปกติ Framework จะทำการเรียกใช้ Class นี้อัตโนมัติหากมีการตั้งค่าให้ใช้ Database Session
$sess = new \Kotchasan\Session;
session_set_save_handler(
[$sess, '_open'],
[$sess, '_close'],
[$sess, '_read'],
[$sess, '_write'],
[$sess, '_destroy'],
[$sess, '_gc']
);
register_shutdown_function('session_write_close');
session_start();ขนาดไฟล์: 184 บรรทัด