การเก็บข้อมูลผู้ใช้ - คุกกี้

คุกกี้ใช้ในการอ้างถึงอัตลักษณ์ (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 หากยังไม่หมดอายุ ถึงจะปิดเบราว์เซอร์ไปแล้วคุกกี้ก็ยังอยู่ (แต่ถ้าสั่งเคลียร์คุกกี้ผ่านทางเบราว์เซอร์มันก็จะหายไปได้นะ)

blog comments powered by Disqus