การสร้างโปรแกรมประยุกต์เว็บ > Cookie และ Session
Cookie
cookie เป็นวิธีหนึ่งในการเก็บร่องรอยปฏิบัติการของผู้ใช้กับเว็บ โดยการส่งสารสนเทศเป็นบิตขนาดเล็กไป ยังลูกข่ายที่ประกอบด้วยชื่อและค่าเป็นข้อความ เมื่อลูกข่ายทำคำขอไปยังแม่ข่าย บิตชิ้นนี้ได้รับการส่งไปยังแม่ข่าย
cookie ในเครื่องลูกข่ายมีรูปแบบดังนี้
Set-Cookie: Name = value; [expire = sec;] [path = path;] [domain = Domain_Name; ] [secure]
ปฏิบัติการพื้นฐาน
เริ่มต้นจากการตั้งค่าและการเข้าถึง cookie ใน PHP
การตั้งค่า Cookie จาก PHP
การตั้งค่า cookie ใน PHP เองใช้ฟังก์ชัน setcookie ( ) ให้ใช้ไวยากรณ์นี้
int setcookie (string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])
ถ้าตั้งค่า cookie เป็น
setcookie("mycookie" , "value");
cookie นี้มีชื่อว่า "mycookie" และค่าเป็น "value"
คำสั่ง setcookie ต้องอยู่บรรทัดแรกของสคริปต์ เนื่องจาก cookie ต้องเป็นส่วนหนึ่งของส่วนหัว
การเข้าถึง Cookie
เมื่อลูกข่ายส่ง cookie กลับมาที่แม่ข่ายพร้อมคำขอ การเข้าถึงค่าสามารถใช้ $_COOKIE ที่เป็น superglobal array รวมทั้งให้ $HTTP_COOKIE_VARS ถ้าตั้งค่า register_long_arrays เป็น on ในไฟล์ php.ini และแต่ละค่าของ cookie เป็นตัวแปร global ถ้าตั้งค่า register_global ใน php.ini
<?php
echo $_COOKIE[ " mycookie " ];
?>
$_COOKIE รับค่า cookie ที่ส่งมากับคำขอ ดังนั้นการตั้งค่าในคำสั่งจึงไม่มีผลกับ $_COOKIE ในทันที ค่าจะเปลี่ยนก็ต่อเมื่อ browser ส่งคำขอที่ มี Set-Cookie กลับมายังเพจนั้น
<?
setcookie("new" , "Hello");
echo $_COOKIE["new"]; // ไม่ได้ตั้งค่าเป็น Hello
?>
ภาพ 2.1.1 การเปลี่ยนแปลงค่าของ $_COOKIE
การควบคุม Cookie
ในฟังก์ชัน setcookie ที่มี 6 พารามิเตอร์
setcookie(name [,value [, expire [,path [,domain [, secure]]]]])
expire ตั้งค่าวันที่หรือช่วงเวลาการหมดอายุ เช่น 5 August 2006 หรือให้หมดใน 1 ชั่วโมง ตัวอย่าง การตั้งให้หมดใน 2 ชั่วโมง หรือ 7200 วินาที
setcookie("mycookie" , "value", time()+7200);
หลังจากหมดอายุแล้ว browser จะไม่ส่งค่าไปยังแม่ข่าย ถ้าตั้งค่าเป็น 0 จะพิจารณาเป็น session cookie โดย cookie ได้รับการเก็บไว้ในหน่วยความจำและมีอายุเท่ากับการเปิด browser ถ้าปิด cookie นี้จะหายไป
Path ระบุพื้นที่การใช้ cookie เช่น "/member" จะมีผลเฉพาะเพจใน URL ที่เริ่มต้นด้วย member แต่ถ้ากำหนดเป็น "/" จะมีผลกับทุกเพจในไซต์
domain เป็นการจำกัดหรือขยายเครื่องสำหรับ cookie
secure ระบุสถานะให้มีผลเฉพาะการเชื่อมต่อ HTTPS ด้วยค่า 1 กำหนดความปลอดภัยตามค่าเริ่มต้นหรือ 0 ไม่กำหนด
การลบ Cookie
cookie สามารถลบได้โดยการเรียก setcookie ( ) อีกครั้งด้วยชื่อเดียวกันแต่ไม่ตั้งค่า value และกำหนดเวลา expire ย้อนหลัง
setcookie("mycookie" , "", time()-3600);
browser จะได้รับรู้การสิ้นสุดของ cookie และลบทิ้ง
Cookie Array
PHP สามารถสร้าง associate array สำหรับ cookie ตัวอย่าง การบันทึกชื่อ ที่อยู่ และจำนวนเงินซื้อสินค้าใน cookie array
setcookie("UserInfo[name]" , $_POST["username"]);
setcookie("UserInfo[address]" , $_POST["user_address"]);
setcookie("UserInfo[amount]" , $_POST["user_amount"]);
การเข้าถึง cookie ในครั้งต่อไปใน $_COOKIE array สามารถตั้งค่าให้ตัวแปรได้ดังนี้
$name = $_COOKIE["UserInfo"]["name"];
$addr = $_COOKIE["UserInfo"]["address"];
$amt = $_COOKIE["UserInfo"]["amount"];
|