ใน Module นี้ เราจะมาเรียนรู้เกี่ยวกับ Session และ Cookie ซึ่งเป็นกลไกสำคัญในการจดจำผู้ใช้และคงสถานะของเว็บไซต์ระหว่างการเข้าชมหลายๆ หน้า
Session คืออะไร?
Session คือกลไกที่ช่วยให้เว็บไซต์สามารถจดจำผู้ใช้และข้อมูลที่เกี่ยวข้องกับการเข้าชมครั้งนั้นได้ ข้อมูล Session จะถูกเก็บไว้บน Server และเชื่อมโยงกับ Browser ของผู้ใช้ผ่าน Session ID
การทำงานของ Session
- เมื่อผู้ใช้เข้าสู่เว็บไซต์ PHP จะตรวจสอบว่ามี Session ID ที่ส่งมาจาก Browser หรือไม่
- ถ้าไม่มี Session ID หรือ Session ID นั้นไม่ถูกต้อง PHP จะสร้าง Session ID ใหม่และส่งกลับไปยัง Browser (โดยปกติจะเก็บใน Cookie)
- ข้อมูลที่เกี่ยวข้องกับ Session นั้นจะถูกเก็บไว้บน Server ภายใต้ Session ID นั้นๆ
- ในการเข้าชมหน้าอื่นๆ ภายในเว็บไซต์ Browser จะส่ง Session ID กลับมายัง Server ทำให้ PHP สามารถดึงข้อมูล Session ของผู้ใช้รายนั้นได้
- Session จะสิ้นสุดลงเมื่อผู้ใช้ปิด Browser หรือ Session หมดอายุตามเวลาที่กำหนด
การใช้งาน Session ใน PHP
- การเริ่มต้น Session: ใช้ฟังก์ชัน
session_start()
ที่จุดเริ่มต้นของทุกหน้าที่ต้องการใช้งาน Session (ก่อนแท็ก<html>
)
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>Session Example</title>
</head>
<body>
<h1>Welcome!</h1>
</body>
</html>
- การเก็บข้อมูล Session: ใช้ Superglobal Array
$_SESSION
เพื่อเก็บข้อมูล
<?php
session_start();
$_SESSION["username"] = "JohnDoe";
$_SESSION["login_time"] = time();
echo "Session variables are set.";
?>
- การดึงข้อมูล Session: เข้าถึงค่าใน
$_SESSION
โดยใช้ Key
<?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.";
}
?>
- การทำลาย Session: ใช้ฟังก์ชัน
session_unset()
เพื่อลบตัวแปร Session ทั้งหมด และsession_destroy()
เพื่อทำลาย Session ทั้งหมด
<?php
session_start();
// ลบตัวแปร Session ทั้งหมด
session_unset();
// ทำลาย Session
session_destroy();
echo "Session destroyed.";
?>
Cookie คืออะไร?
Cookie คือไฟล์ขนาดเล็กที่ Server สามารถส่งไปยัง Browser ของผู้ใช้ เพื่อเก็บข้อมูลบางอย่างไว้ในเครื่องของผู้ใช้ ข้อมูล Cookie จะถูกส่งกลับไปยัง Server พร้อมกับทุกๆ Request ที่ส่งมาจาก Browser นั้นๆ
การทำงานของ Cookie
- Server ส่ง HTTP Response ที่มี Header
Set-Cookie
ไปยัง Browser พร้อมกับข้อมูล Cookie (ชื่อ, ค่า, วันหมดอายุ, Path, Domain, etc.) - Browser จะเก็บข้อมูล Cookie ไว้ในเครื่องของผู้ใช้
- เมื่อ Browser ส่ง Request ไปยัง Server เดิมอีกครั้ง (ภายในระยะเวลาที่ Cookie ยังไม่หมดอายุ และตรงตามเงื่อนไข Path และ Domain) Browser จะแนบข้อมูล Cookie ไปใน HTTP Request Header
- Server สามารถอ่านค่า Cookie จาก HTTP Request Header และใช้ข้อมูลนั้นในการจดจำผู้ใช้หรือปรับแต่งการแสดงผล
- Cookie มีวันหมดอายุ เมื่อถึงเวลานั้น Browser จะลบ Cookie
การใช้งาน Cookie ใน PHP
- การตั้งค่า Cookie: ใช้ฟังก์ชัน
setcookie()
ก่อนแท็ก<html>
<?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>
- การอ่านค่า Cookie: ใช้ Superglobal Array
$_COOKIE
เพื่อเข้าถึงค่า Cookie
<?php
if (isset($_COOKIE["user"])) {
echo "Welcome " . $_COOKIE["user"] . "!";
} else {
echo "Welcome guest!";
}
?>
- การตรวจสอบว่า Cookie ถูกตั้งค่าหรือไม่: ใช้ฟังก์ชัน
isset()
<?php
if (isset($_COOKIE["user"])) {
// Cookie "user" ถูกตั้งค่า
}
?>
- การลบ Cookie: ตั้งค่า Cookie ให้มีวันหมดอายุในอดีต
<?php
$cookie_name = "user";
setcookie($cookie_name, "", time() - 3600, "/");
echo "Cookie 'user' is deleted.";
?>
ความแตกต่างระหว่าง Session และ Cookie
คุณสมบัติ | Session | Cookie |
---|---|---|
การเก็บข้อมูล | บน Server | บน Browser ของผู้ใช้ |
ความปลอดภัย | ปลอดภัยกว่า (ข้อมูลสำคัญไม่ถูกเก็บในเครื่องผู้ใช้โดยตรง) | ความปลอดภัยน้อยกว่า (ผู้ใช้อาจแก้ไขหรือลบได้) |
ขนาดข้อมูล | เก็บข้อมูลได้มากกว่า | มีข้อจำกัดเรื่องขนาด |
วันหมดอายุ | สิ้นสุดเมื่อปิด Browser หรือหมดเวลาที่ Server กำหนด | มีวันหมดอายุที่กำหนดโดย Server |
วัตถุประสงค์หลัก | จดจำสถานะผู้ใช้ระหว่างการเข้าชมหลายหน้า | เก็บข้อมูลเล็กน้อยเพื่อปรับแต่งการแสดงผลหรือจดจำการตั้งค่า |
กิจกรรมใน Module 8
- สร้างหน้าเว็บที่ใช้ Session ในการเก็บชื่อผู้ใช้เมื่อ Login และแสดงชื่อผู้ใช้ในหน้าอื่นๆ
- สร้างระบบ Login/Logout อย่างง่ายโดยใช้ Session
- สร้าง Cookie เพื่อจดจำธีมสีที่ผู้ใช้เลือก และนำมาใช้ในการแสดงผลหน้าเว็บ
- สร้าง Cookie เพื่อจดจำการตั้งค่าภาษาของผู้ใช้
- ทดลองตั้งค่าวันหมดอายุ Path และ Domain ของ Cookie
- ทดลองลบ Cookie
ใน Module ถัดไป เราจะมาเรียนรู้เกี่ยวกับการทำงานกับไฟล์ (File Handling) ใน PHP ซึ่งเป็นสิ่งจำเป็นสำหรับการอ่าน เขียน และจัดการไฟล์บน Server ครับ!