การใช้งาน Cookie
การสร้าง Cookie
Cookie สามารถสร้างได้จากทั้งจากทาง Server และจากทาง Client
เอง ขึ้นอยู่กับภาษาโปรแกรมที่คุณใช้ในการสร้าง Cookie และเมื่อ Cookie
ถูกสร้างขึ้นมาแล้ว ก็จะส่งผ่านกันระหว่าง Server และ Browser ทาง
HTTP header การสร้าง Cookie จะแตกต่างกันออกไปแล้วแต่ภาษาที่
จะใช้ในการสร้าง บางภาษาคุณสามารถที่จะกำหนดไว้ใน HTTP header
ได้เองเลย (เช่น perl) หรือบางภาษาคุณจะต้องใช้งานผ่าน function ที่ภาษา
นั้นๆเตรียมไว้ให้แล้ว (เช่น ASP) ในส่วนของบทความนี้ จะคลอบคลุมเฉพาะ
การสร้าง Cookie ด้วยภาษา perl, Javascript และ ASP เท่านั้น
การสร้าง Cookie ด้วยภาษา perl
เพราะว่าใน perl เราสามารถที่จะกำหนด HTTP header ได้เอง และ
programmer ส่วนมากก็นิยมที่จะเขียน header อย่างเช่น
Content-type: text/html
<HTML.....
ซึ่งเป็นการกำหนด header บอกว่าเอกสารต่อไปนี้จะเป็น ข้อมูล html
แบบ text จาก header นี้เราสามารถสร้าง Cookie ได้ง่ายๆโดยตรง
โดยเพิ่ม header เข้าไปอีกบรรทัดนึงดังนี้
Content-type: text/html
Set-Cookie:test=pass; path=/; expires Mon, 09-Mar-2008 15:00:11 GMT
<HTML.......
ถ้าหากว่าจะมีการกำหนด header Location เพื่อทำการ redirect ด้วยนั้น
ก็ให้กำหนด header Location ไว้หลังสุดจะดีที่สุด สำหรับภาษา Perl นั้น
การกำหนด Cookie ค่อนข้างจะเป็นเรื่องง่าย ยิ่งถ้าคุณคล่อง Perl มากเท่าไหร่
ก็จะยิ่งง่ายขึ้นเท่านั้น...
การสร้าง Cookie ด้วยภาษา Javascript
Javascript มี object ภายในที่ชื่อว่า document.cookie ให้ใช้สำหรับ
ใช้งาน Cookie object นี้จะเก็บ cookie ทุกตัวที่ใช้ได้กับเวปเพจหน้านั้นๆไว้
เมื่อคุณเพิ่ม Cookie เข้าไปใน object นี้ ก็จะมีการสร้าง Cookie เกิดขึ้น
และหลังจากนั้นในการติดต่อกับ Server Cookie ที่สร้างขึ้นก็จะส่งผ่านกัน
โดยผ่าน HTTP header
ซึ่งสำหรับ source code ที่จะเอาไว้ใช้เกี่ยวกับ Cookie ของ Javascript
มีคนเค้าทำไว้ดีอยู่แล้ว ผมก็ขออนุญาต Link ไปเลยแล้วกันนะครับ สามารถดูได้ที่
http://www.hidaho.com/cookies/cookie.txt
ในนั้นก็จะมี function ไว้ให้เรียบร้อยทั้งการสร้าง การลบ Cookie และตัวอย่าง
พร้อมทั้งคำอธิบายด้วยครับผม
การสร้าง Cookie ด้วยภาษา ASP
สำหรับ ASP เราสามารสร้าง Cookie ได้โดยใช้ object ใน ASP ที่ชื่อว่า
Response.Cookie ซึ่งก็จะมี parameter ต่างๆ เหมือนกับ parameter
ที่เราใช้กันใน HTTP header ดังนี้
Response.Cookies("test") = "pass"
Response.Cookies("test").Expires = "March 9, 2008"
Response.Cookies("test").Domain = "mydomain.com"
Response.Cookies("test").Path = "/"
Response.Cookies("test").Secure = FALSE
ข้อจำกัดในการสร้าง Cookie
ข้อจำกัดต่างๆในการสร้าง Cookie และการเก็บ Cookie มีดังต่อไปนี้
จะไม่สามารถ สร้าง Cookie สำหรับ Domain อื่น ที่ไม่ใช่ Domain ของเวปเพจ ที่สร้าง Cookie นั้นๆอยู่ได้
HTTP header ของ Cookie จะต้องมีขนาดน้อยกว่า 4Kbyte
สำหรับ Netscape จำนวนสูงสุดของ Cookie ต่อ domain จะมีได้เพียง 20 ถ้าเกิน 20 ของเก่าที่ถูกใช้น้อยที่สุด ก็จะถูกแทนที่ไป
สำหรับ Netscape จำนวนสูงสุดของ Cookie ทั้งหมดจะมีได้เพียง 300
การอ่าน Cookie
การอ่าน Cookie โดยมากแล้ว เราจะไม่ต้องไปอ่านจาก HTTP header
เพราะว่าตัวภาษาต่างๆที่เรานิยมใช้กัน จะจัดเตรียม object สำหรับ Cookie
ไว้ให้แล้ว และ Cookie ก็สามารถอ่านได้ทั้งฝั่ง Browser และ Server
ขึ้นอยู่กับภาษาที่ใช้เช่นเคย
การอ่าน Cookie ด้วยภาษา Perl
ในระบบปฎิบัติการที่สนับสนุนการใช้งานตัวแปรแวดล้อม (เช่นพวก Unix ทั้งหลาย)
$ENV{'HTTP_COOKIE'} ตัวโปรแกรมภาษา Perl จะสามารถอ่าน Cookie
ได้โดยผ่านตัวแปรนั้น ซึ่งก่อนที่จะนำมาใช้ได้ ก็จะต้องมีการแตกค่าที่อยู่ใน $ENV{'HTTP_COOKIE'}
เสียก่อน เพราะตอนแรกมันจะอยู่รวมกันทุกตัว เราสามารถแตกค่ามันออกมาได้โดยใช้
ชุดคำสั่ง
@nvpairs=split(/; /, $ENV{'HTTP_COOKIE'});
foreach $pair (@nvpairs) {
($name, $value) = split(/=/, $pair);
$cookie{$name} = $value;
}
เมื่อจะเรียกใช้ Cookie ก็ทำได้โดยใช้ชุดคำสั่งประมาณว่า
$Test = $cookie{'test'}
ซึ่งจากที่ผ่านๆมาของเรา จะให้ค่าเท่ากับ pass (ใครงงว่าทำไมได้ค่าว่า
pass ก็ย้อนกลับไปดูตัวอย่าง และบทความ Cookie ก่อนหน้านี้ดูนะครับ)
การอ่าน Cookie ด้วยภาษา Javascript
สามารถทำได้โดยใช้ object ชื่อ document.cookie เช่นเคย
และผมก็ค่อนข้างจะขี้เกียจนะครับ ดังนั้นก็เช่นเคยครับ มีคนเค้าทำไว้ดีอยู่แล้ว
ผมก็ขออนุญาต Link ไปเลยแล้วกันนะครับ สามารถดูได้ที่
http://www.hidaho.com/cookies/cookie.txt
ในนั้นก็จะมี function ไว้ให้เรียบร้อยทั้งการอ่าน การสร้าง การลบ Cookie และตัวอย่าง
พร้อมทั้งคำอธิบายด้วยครับผม
การอ่าน Cookie ด้วยภาษา ASP
สามารถทำได้โดยใช้ object ชื่อว่า Request.Cookies ซึ่งจะต่างจาก
ภาษาอื่นๆที่เราไม่ต้องมาเขียนชุดคำสั่งจัดการอะไรกับ Cookie เลย มันจะจัด
มาให้เราใช้งานได้ง่ายดาย รวดเร็วอยู่แล้ว (นี่แหละจุดดีที่สุดของ ASP ที่มีอยู่
ไม่ค่อยมากนัก ฮ่าๆ) ดังนั้นการเข้าถึงค่าของ Cookie ก็สามารถทำได้ง่ายดาย
โดยใช้ชุดคำสั่งประมาณว่า..
Test = Request.Cookies("test")
ซึ่งจากตัวอย่างที่ผ่านๆมา เราก็จะได้ค่าใน Test ว่า pass
ข้อจำกัดของการอ่าน Cookie
มีอยู่อย่างเดียว คือว่าเราจะอ่านได้เฉพาะ Cookie ที่เป็นของ domain และ
path ของเราเท่านั้น ซึ่งในส่วนนี้จะถูกควบคุมโดย การทำงานของ Browser
ตัว Browser เองจะตรวจสอบว่า เวปเพจที่เข้าถึงนี้อยู่ภายใต้ domain และ
path อะไร และมี Cookie สำหรับ domain และ path นั้นๆอยู่หรือไม่
ถ้ามี Browser ก็จะส่ง Cookie ให้กับ Server โดยผ่าน HTTP header
ในตอนเรียกเวปเพจนั้นๆ
การใช้งานอื่นๆที่เกี่ยวข้องกับเรื่อง Cookie
การลบค่าของ Cookie
มีอยู่สองขั้นตอนที่จะใช้กันในการลบค่า Cookie ดังนี้
กำหนดค่าของ Cookie ให้เป็น null (ว่างเปล่า)
กำหนดค่าวันหมดอายุของ Cookie เป็นวันในอดีตที่ผ่านมาแล้ว
ตังอย่าง ถ้าต้องการลบค่าของ Cookie ที่ชื่อว่า test จะต้องระบุ
HTTP header ดังนี้
Content-type: text/html
Set-Cookie: test=; path=/; expires Thu, 01-Jan-1970 00:00:00 GMT
เหตุผลที่จะต้องทำทั้ง 2 ขั้นตอนก็เพราะว่า ถ้ากำหนดเฉพาะวันหมดอายุให้
เป็นวันที่ผ่านมาแล้ว จะไม่ทำให้เกิดการเปลี่ยนแปลงของค่าใน Cookie จนกว่า
Browser จะปิด เพราะว่าการทำงานต่างๆเกี่ยวกับ Cookie จะทำงาน
กันตอนที่จะปิด Browser และจะจัดเก็บ การกำหนดค่าของ Cookie ให้มีค่า
เป็น null ทำให้เราสามารถตราวจสอบค่าของ Cookie ได้ในขณะที่ยังไม่มีการ
ปิด Browser เกิดขึ้น
การตรวจสอบว่า Browser รับ Cookie หรือไม่
สำหรับการตรวจสอบโดยใช้ภาษาที่ทำงานในฝั่ง Server สามารถทำได้โดย
ทำการสร้าง Cookie ขึ้นมาก่อน ในการเรียกใช้งานครั้งแรก และก็ทำการ
ตรวจสอบว่า Cookie ที่สร้างนั้นมีอยู่หรือไม่ ในการเรียกใช้งานครั้งที่สอง
ซึ่งการตรวจสอบของฝั่ง Server นี้ไม่สามารถทำได้ ภายในการติดต่อ 1 ครั้ง
สำหรับการตรวจสอบโดยใช้ภาษาที่ทำงานในฝั่ง Client (Browser)
เช่น Javascript ก็สามารถทำได้ในเวปเพจเดียวกันได้เลย โดยทำการ
สร้าง Cookie และอ่าน Cookie ต่อเนื่องกันได้เลย ถ้าค่าที่สร้างไว้
สามารถอ่านได้ ก็แสดงว่า Browser นั้นรับ Cookie
กลับหน้าแรก.. ->