Kotchasan Framework Documentation

Kotchasan Framework Documentation

Session Class - การจัดการ Session ผ่านฐานข้อมูล

TH 03 Feb 2026 16:55

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 บรรทัด