PHP101 – Session และ Cookie

ใน Module นี้ เราจะมาเรียนรู้เกี่ยวกับ Session และ Cookie ซึ่งเป็นกลไกสำคัญในการจดจำผู้ใช้และคงสถานะของเว็บไซต์ระหว่างการเข้าชมหลายๆ หน้า

Session คืออะไร?

Session คือกลไกที่ช่วยให้เว็บไซต์สามารถจดจำผู้ใช้และข้อมูลที่เกี่ยวข้องกับการเข้าชมครั้งนั้นได้ ข้อมูล Session จะถูกเก็บไว้บน Server และเชื่อมโยงกับ Browser ของผู้ใช้ผ่าน Session ID

การทำงานของ Session

  1. เมื่อผู้ใช้เข้าสู่เว็บไซต์ PHP จะตรวจสอบว่ามี Session ID ที่ส่งมาจาก Browser หรือไม่
  2. ถ้าไม่มี Session ID หรือ Session ID นั้นไม่ถูกต้อง PHP จะสร้าง Session ID ใหม่และส่งกลับไปยัง Browser (โดยปกติจะเก็บใน Cookie)
  3. ข้อมูลที่เกี่ยวข้องกับ Session นั้นจะถูกเก็บไว้บน Server ภายใต้ Session ID นั้นๆ
  4. ในการเข้าชมหน้าอื่นๆ ภายในเว็บไซต์ Browser จะส่ง Session ID กลับมายัง Server ทำให้ PHP สามารถดึงข้อมูล Session ของผู้ใช้รายนั้นได้
  5. Session จะสิ้นสุดลงเมื่อผู้ใช้ปิด Browser หรือ Session หมดอายุตามเวลาที่กำหนด

การใช้งาน Session ใน PHP

  1. การเริ่มต้น Session: ใช้ฟังก์ชัน session_start() ที่จุดเริ่มต้นของทุกหน้าที่ต้องการใช้งาน Session (ก่อนแท็ก <html>)
PHP
<?php
  session_start();
?>
<!DOCTYPE html>
<html>
<head>
  <title>Session Example</title>
</head>
<body>
  <h1>Welcome!</h1>
</body>
</html>
  1. การเก็บข้อมูล Session: ใช้ Superglobal Array $_SESSION เพื่อเก็บข้อมูล
PHP
<?php
  session_start();

  $_SESSION["username"] = "JohnDoe";
  $_SESSION["login_time"] = time();

  echo "Session variables are set.";
?>
  1. การดึงข้อมูล Session: เข้าถึงค่าใน $_SESSION โดยใช้ Key
PHP
<?php
  session_start();

  if (isset($_SESSION["username"])) {
    echo "Username is: " . $_SESSION["username"] . "<br>";
    echo "Last login: " . date('Y-m-d H:i:s', $_SESSION["login_time"]);
  } else {
    echo "User is not logged in.";
  }
?>
  1. การทำลาย Session: ใช้ฟังก์ชัน session_unset() เพื่อลบตัวแปร Session ทั้งหมด และ session_destroy() เพื่อทำลาย Session ทั้งหมด
PHP
<?php
  session_start();

  // ลบตัวแปร Session ทั้งหมด
  session_unset();

  // ทำลาย Session
  session_destroy();

  echo "Session destroyed.";
?>

Cookie คืออะไร?

Cookie คือไฟล์ขนาดเล็กที่ Server สามารถส่งไปยัง Browser ของผู้ใช้ เพื่อเก็บข้อมูลบางอย่างไว้ในเครื่องของผู้ใช้ ข้อมูล Cookie จะถูกส่งกลับไปยัง Server พร้อมกับทุกๆ Request ที่ส่งมาจาก Browser นั้นๆ

การทำงานของ Cookie

  1. Server ส่ง HTTP Response ที่มี Header Set-Cookie ไปยัง Browser พร้อมกับข้อมูล Cookie (ชื่อ, ค่า, วันหมดอายุ, Path, Domain, etc.)
  2. Browser จะเก็บข้อมูล Cookie ไว้ในเครื่องของผู้ใช้
  3. เมื่อ Browser ส่ง Request ไปยัง Server เดิมอีกครั้ง (ภายในระยะเวลาที่ Cookie ยังไม่หมดอายุ และตรงตามเงื่อนไข Path และ Domain) Browser จะแนบข้อมูล Cookie ไปใน HTTP Request Header
  4. Server สามารถอ่านค่า Cookie จาก HTTP Request Header และใช้ข้อมูลนั้นในการจดจำผู้ใช้หรือปรับแต่งการแสดงผล
  5. Cookie มีวันหมดอายุ เมื่อถึงเวลานั้น Browser จะลบ Cookie

การใช้งาน Cookie ใน PHP

  1. การตั้งค่า Cookie: ใช้ฟังก์ชัน setcookie() ก่อนแท็ก <html>
PHP
<?php
  $cookie_name = "user";
  $cookie_value = "John Doe";
  $expiry_time = time() + (86400 * 30); // 30 วัน
  setcookie($cookie_name, $cookie_value, $expiry_time, "/"); // "/" หมายถึง Cookie สามารถใช้งานได้ในทุก Path ของ Domain
?>
<!DOCTYPE html>
<html>
<head>
  <title>Cookie Example</title>
</head>
<body>
  <p>Cookie is set!</p>
</body>
</html>
  1. การอ่านค่า Cookie: ใช้ Superglobal Array $_COOKIE เพื่อเข้าถึงค่า Cookie
PHP
<?php
  if (isset($_COOKIE["user"])) {
    echo "Welcome " . $_COOKIE["user"] . "!";
  } else {
    echo "Welcome guest!";
  }
?>
  1. การตรวจสอบว่า Cookie ถูกตั้งค่าหรือไม่: ใช้ฟังก์ชัน isset()
PHP
<?php
  if (isset($_COOKIE["user"])) {
    // Cookie "user" ถูกตั้งค่า
  }
?>
  1. การลบ Cookie: ตั้งค่า Cookie ให้มีวันหมดอายุในอดีต
PHP
<?php
  $cookie_name = "user";
  setcookie($cookie_name, "", time() - 3600, "/");
  echo "Cookie 'user' is deleted.";
?>

ความแตกต่างระหว่าง Session และ Cookie

คุณสมบัติSessionCookie
การเก็บข้อมูลบน Serverบน Browser ของผู้ใช้
ความปลอดภัยปลอดภัยกว่า (ข้อมูลสำคัญไม่ถูกเก็บในเครื่องผู้ใช้โดยตรง)ความปลอดภัยน้อยกว่า (ผู้ใช้อาจแก้ไขหรือลบได้)
ขนาดข้อมูลเก็บข้อมูลได้มากกว่ามีข้อจำกัดเรื่องขนาด
วันหมดอายุสิ้นสุดเมื่อปิด Browser หรือหมดเวลาที่ Server กำหนดมีวันหมดอายุที่กำหนดโดย Server
วัตถุประสงค์หลักจดจำสถานะผู้ใช้ระหว่างการเข้าชมหลายหน้าเก็บข้อมูลเล็กน้อยเพื่อปรับแต่งการแสดงผลหรือจดจำการตั้งค่า

กิจกรรมใน Module 8

  1. สร้างหน้าเว็บที่ใช้ Session ในการเก็บชื่อผู้ใช้เมื่อ Login และแสดงชื่อผู้ใช้ในหน้าอื่นๆ
  2. สร้างระบบ Login/Logout อย่างง่ายโดยใช้ Session
  3. สร้าง Cookie เพื่อจดจำธีมสีที่ผู้ใช้เลือก และนำมาใช้ในการแสดงผลหน้าเว็บ
  4. สร้าง Cookie เพื่อจดจำการตั้งค่าภาษาของผู้ใช้
  5. ทดลองตั้งค่าวันหมดอายุ Path และ Domain ของ Cookie
  6. ทดลองลบ Cookie

ใน Module ถัดไป เราจะมาเรียนรู้เกี่ยวกับการทำงานกับไฟล์ (File Handling) ใน PHP ซึ่งเป็นสิ่งจำเป็นสำหรับการอ่าน เขียน และจัดการไฟล์บน Server ครับ!

ความคิดเห็น