พอดีได้รับ email จากสมาชิกท่านหนึ่งเขียนมาบอกว่าอยากให้ นำเสนอบทความเกี่ยวกับการใช้งาน session บ้าง ผมเองก็นั้งคิดอยู่นานเหมือนกันว่าจะเขียนเรื่องอะไร เกี่ยวกับ session ดีถึงจะ unzeen เพราะว่า session เองก็เป็นแค่รูปแบบการเก็บค่าตัวแปรไว้ใช้งานในช่วงระยะวเวลาหนึ่งเท่านั้น เอง แต่ผมก็พอจะมี เทคนิคการใช้งาน session เล็กๆ น้อยมาฝากอยู่เหมือนกัน เผื่อว่าจะมีประโยชน์กับใครบ้าง
ในการใช้งาน session นั้นเราสามารถเรียกใช้งานได้โดยการประกาศ session_start(); ไว้ที่บรรทัดแรกสุดของโปรแกรม
(บรรทัดแรกสุด หมายถึงว่า บรรทัดก่อนที่จะมีการสั่ง print ข้อมูลใดๆ ออกมาแสดงผลนะครับ)
ในการใช้ตัวแปร session นั้นสามารถใช้งานได้หลายแบบ ไม่ว่าจะเรียกใช้ แบบตัวแปรธรรมดา หรือว่าจะเรียกใช้โดยผ่านทาง $_SESSION[] ซึ่งเป็น array ของ session เอง (ในคู่มือของ PHP เขาแนะนำให้เราใช้ $_SESSION[] เพราะว่าจะทำให้ code ที่ เราเขียนดูเป็นระเบียบและไม่ต้องทำการเรียกใช้ session_register() แต่ตัวอย่างที่ผมจะใช้ ผมจะใช้แบบตัวแปรธรรมดา แล้วกัน นะครับ ใครอยากใช้แบบไหน ก็ลองใช้กันดูแล้วแต่ถนัด)
ก่อนทำการทดสอบ โปรแกรมให้สร้าง folder session ขึ้นมาก่อน (สร้างไว้ใน folder ที่เราจะทดสอบโปรแกรมเลยนะครับ) และทำการเปลี่ยน permission ให้เป็น 777 เพื่อให้สามารถทำการเขียนข้อมูล ลงไปได้ (หากใช้ windows คงไม่ต้องเปลี่ยน) เพื่อเอาไว้เก็บค่า session ต่างๆ ที่เกิดขึ้น โดยปกติแล้ว เมื่อเราทำการสร้าง session ขึ้นมาจะมี การสร้าง file session เอาไว้เก็บข้อมูลของตัวแปรต่างๆด้วย ซึ่งหากว่าเราไม่ได้ กำหนด session_save_path() ไว้ที่โปรแกรมของเรา session ที่เราสร้างก็จะถูกนำไปเก็บไว้ที่ /tmp ในระบบ Unix/Linux หรือ c:\tmp ในระบบ windows แต่ถ้าเป็นผมแนะนำให้สร้าง folder ไว้เก็บ session ของเราไว้ต่างหากดีกว่าไม่ต้องไปรวมไว้กับของ คนอื่นเขาเพื่อความปลอดภัยของข้อมูลที่เราเก็บลง session ด้วย เพราะว่าข้อมูลที่เราเก็บลง session จะเป็นแค่ text ธรรมดาไม่ได้มีการเข้ารหัสเอาไว้ อาจจะทำให้ผู้ไม่ประสงค์ดีทำการ hack ข้อมูลเอาไปได้หากว่าเราเก็บ session ไว้ใน path เดิมของระบบ
มาทำการทดสอบโปรแกรมแรกของเรากันก่อนเลย โดยเราจะตั้งชื่อโปรแกรมว่า test1.php และมีข้อมูลตามตัวอย่างต่อไปนี้
test1.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php session_save_path("./session/"); session_start(); $test1 = "xxxxxxx"; $test2 = "yyyyyyy"; session_register("test1"); session_register("test2"); print "Start Session OK<br>"; print $test1."<br>"; print $test2."<br>"; print "<a href='test2.php'>Delete Session</a>"; ?> |
จากนั้นให้ทดลองทำการเรียกโปรแกรมขึ้นมา ค่าที่แสดงออกมาจะได้ เป็นค่าของตัวแปร $test1 และ $test2 จากนั้นให้คุณทำการเปิด folder session ขึ้นมาดูจะพบว่ามี file session ถูกสร้างขึ้นมาแล้ว โดยจะมีรูปแบบของชื่อ file ดังนี้ sess_5e3e8cbd40ea2c9cc09a881c3ee4b3fa จากนั้นลองใช้ Edit+ เปิด file ดังกล่าวขึ้นมาดู เราจะพบว่ามีข้อมูลของ ตัวแปรที่เราใช้งานในโปรแกรมอยู่ ดังตัวอย่าง
1 | test1|s:7:"xxxxxxx";test2|s:7:"yyyyyyy"; |
จะเห็นได้ว่าการเก็บข้อมูลของ session นั้นไม่ได้ทำการเข้าหรัสข้อมูลไว้แต่อย่างใด ซึ่งมันคงจะไม่ปลอดภัยนักหากว่าเราจะใช้เก็บ user และ password ของสมาชิกที่ทำการ login เข้ามาในระบบของเรา ดังนั้นเราควรที่จะทำการเข้ารหัสข้อมูลต่างๆ ก่อนที่จะทำการเก็บ ลง session เราอาจจะทำการเขียน function การเข้ารหัสและถอดรหัสง่ายๆ ขึ้นมาใช้เองก็ได้ เพราะ function การเข้ารหัสแบบ md5() ที่มีใน php นั้นอาจจะไม่เหมาะที่เราจะนำมาใช้ในการเข้ารหัสของตัวแปร เนื่องจาก md5 เป็นการเข้ารหัสทางเดี่ยวเราไม่สามารถทำการ ถอดรหัสออกมาเป็นข้อมูลชุดเดิมได้ ดังนั้นเขียน function เข้ารหัสและถอดรหัสง่ายๆ ไว้ใช้เองดีกว่า (เขียนเองนะครับ)
จากตัวอย่างที่ผ่านมา เมื่อเราเลิกใช้งานโปรแกรมแล้วหรือปิด browser ลงไปแล้วก็ตาม แต่ file session ที่ถูกสร้างขึ้นมา ก็ยังไม่ถูกลบออกไป ทั้งนี้เนื่องจากว่าเรายังไม่ได้ทำการยกเลิกการใช้งาน session นั้นออกจากระบบ วิธีการยกเลิก session สามารถทำได้โดยการเรียกใช้ session_destroy() ซึ่งมี code ตัวอย่างต่อไปนี้
test2.php
1 2 3 4 5 6 7 8 9 | <?php session_save_path("./session/"); session_start(); session_unset(); session_destroy(); print "<br>Delete Session OK"; ?> |
จะเห็นได้ว่าเมื่อเราทำการเรียกใช้งาน file test2.php session ที่เราสร้างขึ้นก็จะถูกลบออกไปด้วย
เพิ่มเติม ในการใช้งาน session หากว่าเราทำการเปิด browser ขึ้นมาอีก windows หนึ่งและเรียกโปรแกรมตัวเดี่ยวกันขึ้นมา
session ก็จะถูกสร้างขึ้นมาใหม่เสมอ ฉะนั้นหากว่าเราทำการใช้งาน session แล้วก็อย่าลืมทำการลบ session นั้นทิ้งด้วยนะครับ