Apichart Nakarungutti
The Cake is a Lie
คุกกี้ใช้ในการอ้างถึงอัตลักษณ์ (identity) ของผู้ใช้ อาจจะเป็น username การตั้งค่าการแสดงผล หรือข้อมูลอื่น ๆ ที่ไม่จำเป็นต้องใช้ระบบสมาชิก
คุกกี้จะเป็นไฟล์ข้อความขนาดเล็กที่เก็บอยู่ฝั่ง client และถูกส่งไปยังเซิฟเวอร์ทุกครั้งที่มีการร้องขอ (request) หน้าเว็บ และ PHP สามารถ สร้าง เรียกใช้ เปลี่ยนค่า และลบทิ้งตัวแปรในคุกกี้ได้
การสร้างคุกกี้ใน PHP จะต้องสร้างก่อนที่จะส่ง output ใด ๆ ออกไป ไม่เช่นนั้นอาจเจอปัญหา headers already sent ได้
setcookie(string $name, string $value, int $expire = 0, string $path);
ด้านบนแสดงเฉพาะพารามิเตอร์ที่น่าสนใจ ถ้าต้องการดูพารามิเตอร์ทั้งหมดดูได้จาก function.setcookie
$name
: ชื่อคุกกี้ เป็นพารามิเตอร์ที่จำเป็นตัวเดียวของฟังชั่นนี้$value
: ค่าของคุกกี้$expire
: อายุของคุกกี้ ถ้าไม่กำหนดไว้ค่าจะเป็น 0 ซึ่งจะหมดอายุทันทีที่เบราว์เซอร์ถูกปิด$path
: พาธบนเซิฟเวอร์ที่จะให้เข้าถึงคุกกี้ได้ หากไม่กำหนดจะเป็น /
ซึ่งสคริปท์สามารถเข้าถึงได้ทั้งหมด ถ้าเป็น /board
ก็เฉพาะสคริปท์ในไดเร็คทอรี่ /board
เท่านั้นถึงจะเข้าถึงได้ เป็นต้น <?php
setcookie('user_id', 1, time()+3600, '/');
?>
<html>
.
.
.
การอ่านค่าจากคุกกี้ใช้ตัวแปร $_COOKIE
ซึ่งเป็นตัวแปรชนิด superglobal
<?php
echo $_COOKIE['user_id'];
ส่วนการเปลี่ยนค่าก็ใช้ setcookie()
ใส่ค่าใหม่ลงไป ลบทิ้งก็ใส่ $expire
ให้ติดลบ ส่วนใหญ่ที่เห็นจะใช้ -3600 (1 ชั่วโมงที่แล้ว) ตามคู่มือของ PHP แต่ทำไมถึงใช้ค่านี้ อันนี้ผมไม่รู้นะ
ในส่วนของฝั่งผู้ใช้จะทำผ่าน JavaScript ผู้ใช้แก้ไขโดยตรงไม่ได้ (ยกเว้นจะใช้โปรแกรมแก้ไขคุกกี้)
document.cookie = "cookie_name=cookie_value; expires=expire_time; path=usage_path";
แต่การสั่งแบบนี้ไม่ค่อยสะดวกนัก แนะนำให้สร้างฟังชั่นขี้นมาใช้แทน
// For more convenience create function
function set_cookie(name, value, expire_time, path) {
var expires = "";
if ( expire_time ) {
var date = new Date();
date.setTime(date.getTime() + (expire_time * 1000));
expires = "; expires=" + date.toGMTString();
}
document.cookie = name + "=" + value + expires + "; path=" + path;
}
// create cookie
set_cookie("user_id", 1, 3600, "/");
// get cookie value
var user_id = getCookie("user_id");
อายุของคุกกี้จะขึ้นอยู่กับค่า expires หากยังไม่หมดอายุ ถึงจะปิดเบราว์เซอร์ไปแล้วคุกกี้ก็ยังอยู่ (แต่ถ้าสั่งเคลียร์คุกกี้ผ่านทางเบราว์เซอร์มันก็จะหายไปได้นะ)