Graphic ComScience

บทที่ 16
เรื่องของ Session และ Cookie

   เรื่องของ session

Session  เป็นคุณสมบัติของ PHP ตั้งแต่เวอร์ชั่น 4.0 ขึ้นไปที่ช่วยในการติดตามและตรวจสอบสถานะต่างๆ ของผู้ใช้  โดยเราจะต้องสร้างตัวแปร session เพื่อเก็บค่าต่าง ๆ ที่ต้องการไว้  ซึ่งความคงอยู่ของตัวแปร session นี้จะขึ้นกับวินโดว์ของเว็บบราวเซอร์  ไม่ขึ้นกับไฟล์ PHP  ที่สร้างตัวแปรนั้น  กล่าวคือ  หลังจากตัวแปร session ถูกสร้างขึ้นมาโดยไฟล์ PHP ไฟล์หนึ่งแล้ว  เราจะสามารถอ้างอิงถึงตัวแปรนั้นได้จากไฟล์ PHP อื่นๆ ด้วย  ตราบใดที่ผู้ใช้ยังคงเข้าถึงไฟล์ PHP ในเว็บไซท์ของเราโดยใช้วินโดว์เดิมอยู่

   ฟังก์ชั่นเกี่ยวกับ session

 ¨     ฟังก์ชั่น session_start()

                session_start() เป็นฟังก์ชั่นที่สั่งให้เริ่มต้นใช้งาน (initialize) session

 

รูปแบบ:      session_start()

¨     ฟังก์ชั่น session_register()

                session_register() เป็นฟังก์ชั่นที่ใช้ลงทะเบียนตัวแปรไว้ใน session ปัจจุบัน (ทำให้ตัวแปรนั้นกลายเป็นตัวแปร session)  โดยสามารถลงทะเบียนได้มากกว่า 1 ตัวแปรพร้อมกัน  การลงทะเบียนตัวแปรใดๆ ให้กลายเป็นตัวแปร session นั้น  ก็เพื่อกำหนดให้ PHP เก็บรักษาค่าของตัวแปรนั้นไว้  ภายหลังจากที่ไฟล์ PHP นั้นสิ้นสุดการทำงานในเพจใดเพจหนึ่งไปแล้ว

                ขณะที่เรียกฟังก์ชั่น session_register()  นี้ ถ้าหาก session ยังไม่เริ่มต้น (เราไม่ได้เรียกฟังก์ชั่น session_start() ก่อน)  PHP ก็จะเริ่มต้น session ให้เองโดยปริยาย

 


รูปแบบ
:        session_register(ชื่อตัวแปร [, ชื่อตัวแปร ... ])

            

 

Note: ชื่อตัวแปรที่ระบุให้กับฟังก์ชั่น session_register() นั้นไม่ต้องมี $ นำหน้า  และจะต้องป้อนชื่อตัวแปร session ไว้ภายในเครื่องหมาย single quote หรือ double quote

                สำหรับตัวอย่างต่อไปนี้เราจะใช้ไฟล์ session_register1.php  สร้างตัวแปรชื่อ $myname ขึ้นมา  ก่อนที่จะลงทะเบียนให้เป็นตัวแปร session จากนั้นในไฟล์ session_register2.php เราจะสั่งให้แสดงค่าของตัวแปร $myname ออกมา (การทดสอบตัวอย่างนี้ขอให้สร้างไฟล์ทั้งสองขึ้นมาก่อน  เพราะจะต้องใช้ควบคู่กัน)

 

session_register1.php

 

<?php

session_start(); //เรียกฟังก์ชั่น session_start() เพื่อเริ่มใช้งาน session

$myname = "สุรชัย";

session_register("myname");

?>

 

นี่คือไฟล์ session_register1.php

<br><br>

<a href="session_register2.php">คลิกตรงนี้เพื่อเปิดไฟล์ session_register2.php</a>

 

session_register2.php

<?php

session_start(); //เรียกฟังก์ชั่น session_start() เพื่อเริ่มใช้งาน session

?>

 

นี่คือไฟล์ session_register2.php<br><br>

<?php echo "ค่าของตัวแปร SESSION ของ myname คือ " . $_SESSION['myname']; ?>

 

¨     ฟังก์ชั่น session_unregister()

                session_unregister() เป็นฟังก์ชั่นที่ใช้ยกเลิกการลงทะเบียนตัวแปร session หรือกล่าวอีกนัยหนึ่งคือ บอกให้ PHP ลืมตัวแปรนั้นไปเสีย

 

รูปแบบ       session_unregister(ชื่อตัวแปร)

 

¨     ฟังก์ชั่น session_destroy()

                session_destroy()  เป็นฟังก์ชั่นที่ใช้ทำลายข้อมูลทั้งหมดของ session ปัจจุบัน

 

รูปแบบ:        session_destroy()

   ตัวอย่างการใช้งานตัวแปร Session

ตัวอย่างต่อไปนี้จะคล้ายคลึงกับตัวอย่างก่อนหน้านี้  แต่เราจะไฟล์ทั้งสิ้นจำนวน 3 ไฟล์ คือ

·        ไฟล์ session_file1.php เป็นแบบฟอร์มให้กรอกชื่อผู้ใช้  โดยมีช่องรับข้อความชื่อ username เป็นตัวรับค่า

·        ไฟล์ session_file2.php  ทำหน้าที่ลงทะเบียนตัวแปร $username ไว้ใน session ปัจจุบัน  พร้อมทั้งแสดงค่าของตัวแปรออกมา  ตัวแปร $username นี้เป็นตัวแปรแบบโกลบอล (global variable) ที่ PHP สร้างขึ้นมาให้  โดย PHP จะนำค่าที่ได้รับจากช่องรับข้อความชื่อ username ในไฟล์ session_file1.php มากำหนดให้กับตัวแปรนี้ (เป็นการทำงานร่วมกันระหว่าง PHP กับแท็ก <form> ของ HTML ไม่เกี่ยวกับ session)

·        ไฟล์ session_file3.php  จะแสดงค่าของตัวแปร  $username  ออกมา  เพื่อเป็นการยืนยันว่าตัวแปร $username ยังคงมีตัวตนอยู่และเก็บรักษาค่าเดิมไว้ได้

 

session_file1.php

<?php

session_start(); //เรียกฟังก์ชั่น session_start() เพื่อเริ่มใช้งาน session

session_unregister("username");

?>

<form action="session_file2.php">

กรุณาป้อนชื่อผู้ใช้ (username) แล้วคลิกปุ่ม OK<br>

<input type="text" name="username">

<input type="submit" value="   OK   ">

</form>

 

session_file2.php

<?php

session_start(); //เรียกฟังก์ชั่น session_start() เพื่อเริ่มใช้งาน session

$username = $_POST['username'];

session_register("username");

?>

ชื่อผู้ใช้ที่คุณป้อนมาให้คือ

<?php

echo $_SESSION['username'];

?>

<br><a href="session_file3.php">คลิกตรงนี้เพื่อไปยังไฟล์ session_file3.php</a>

 

session_file3.php

<?php

session_start(); //เรียกฟังก์ชั่น session_start() เพื่อเริ่มใช้งาน session

echo "ชื่อผู้ใช้ของคุณยังคงเป็น " . $_SESSION['username'];

?>

<br><a href="session_file1.php">คลิกตรงนี้เพื่อไปยังไฟล์ session_file1.php</a>

   การติดตามและตรวจสอบผู้ใช้ด้วย Cookie

                 Cookie  หมายถึง  ข้อมูลที่เราส่งไปเก็บไว้ในเครื่องของผู้ใช้  เพื่อประโยชน์ในการตรวจสอบและติดตามผู้ใช้แต่ละคน  โดยหลังจากที่เราส่ง cookie  ไปยังเครื่องของผู้ใช้แล้วถ้าหาก cookie  ยังไม่หมดอายุ (expire) เมื่อผู้ใช้เรียกดูไฟล์ PHP อื่น ๆ ในไดเร็คทอรีเดียวกับไฟล์ PHP ที่สร้าง cookie ขึ้นมา บราวเซอร์ก็จะส่ง cookie นั้นมายังเซิร์ฟเวอร์  ซึ่ง PHP จะนำ cookie มากำหนดเป็นตัวแปรให้เราสามารถตรวจสอบค่าได้ต่อไป

  การติดตามสถานะของผู้ใช้ด้วย session และ cookie มีข้อแตกต่างกันดังนี้

 

ลักษณะการทำงาน

Cookie

Session

การหมดอายุ

ขึ้นอยู่กับเวลาที่เรากำหนดไว้ตอนสร้าง หรือเราสั่งให้หมดอายุเอง

ขึ้นอยู่กับวินโดว์ของบราวเซอร์ที่กำลังใช้งาน  ถ้าวินโดวส์ถูกปิดลงไปก็เป็นอันสิ้นสุด session

ขอบเขตการใช้งานตัวแปร

ไฟล์ที่เรียกใช้จะต้องอยู่ในโฟล์ดอร์เดียวกันกับไฟล์ที่สร้างตัวแปรนั้นขึ้นมา

ไม่จำกัด เพราะขึ้นกับวินโดว์ที่ใช้ บราวซ์เข้ามา

 

                ฟังก์ชั่นที่ใช้ส่ง cookie ไปเก็บไว้ในเครื่องของผู้ใช้ทิ้งไป  ให้เรียกฟังก์ชั่น setcookie() โดยระบุชื่อ cookie นั้น  แต่ไม่ต้องระบุค่าและเวลาหมดอายุ เช่น ถ้าต้องการลบ cookie ชื่อ TestCookie ก็ให้ใช้บรรทัดคำสั่งต่อไปนี้

 


setcookie(“TestCookie”);

 

 

cookie_create.php

<?php

//กำหนดให้ cookie หมดอายุหลังจากถูกสร้างแล้วเป็นเวลา 60 วินาที (1 นาที)

$c_name = "TestCookie";

$c_val = "123";

setcookie($c_name, $c_val, time() + 60);

echo "cookie ชื่อ $c_name ที่มีค่า $c_val ได้ถูกส่งไปยังเว็บบราวเซอร์แล้ว";

?>

<br>

<a href="cookie_test.php">ตรวจสอบค่าของ cookie</a><br>

 

                เมื่อเรียกใช้ไฟล์ cookie_create.php และคลิกที่ลิงค์ ตรวจสอบค่าของ cookie” แล้ว cookie ชื่อ TestCookie ที่เราส่งไปยังบราวเซอร์ก็จะถูกแสดงค่าออกมา

                ให้รีเฟรชเว็บเพจเป็นระยะๆ โดยการกดคีย์ F5  หลังจากนั้นประมาณ 1 นาทีก็จะปรากฏข้อความดังรูปขึ้นมาแทน  ซึ่งบอกให้รู้ว่าขณะนี้ cookie ชื่อ TestCookie ได้หมดอายุแล้ว

                เนื่องจาก cookie ที่เว็บเซิร์ฟเวอร์กับเว็บบราวเซอร์รับส่งกันนั้น  เป็นข้อมูลในส่วนเฮดเดอร์ของโปรโตคอล HTTP ดังนั้นถ้าเราเรียกใช้ฟังก์ชั่น setcookie()  ตามหลังฟังก์ชั่นอื่น ๆ ของ PHP ที่ใช้ส่งข้อมูลไปยังบราวเซอร์  ก็จะเกิดความผิดพลาดขึ้น  ดังตัวอย่าง

 

cookie_error.php

<?php

echo "ทดสอบ";

setcookie("Test", "456", time() + 60);

?>

 

                ซึ่งบางครั้งเราไม่สามารถหลีกเลี่ยงการเขียนโค้ดในลักษณะนี้ได้  ด้วยเหตุนี้ PHP จึงจัดเตรียมฟังก์ชั่นที่ใช้ทำ output buffering ไว้  เพื่อให้เรานำข้อมูลไปพักไว้ในหน่วยความจำชั่วคราว  หรือบัฟเฟอร์ (buffer) ก่อน  แล้วค่อยส่งข้อมูลเหล่านั้นไปยังบราวเซอร์ที่เดียวในตอนท้าย

    ฟังก์ชั่นเกี่ยวกับ Output Buffering

                ฟังก์ชั่นสำคัญๆ ที่เกี่ยวกับการทำ output buffering มีดังนี้

 

¨     ฟังก์ชั่น ob_start()

        เป็นฟังก์ชั่นที่เปิดการใช้งาน output buffering และสั่งให้มีการจองบัฟเฟอร์ไว้  โดยปกติเราจะเรียกฟังก์ชั่นนี้ที่บรรทัดแรกของไฟล์

 

¨     ฟังก์ชั่น ob_end_flush()

        เป็นฟังก์ชั่นที่ใช้ส่งข้อมูลจากบัฟเฟอร์ไปยังบราวเซอร์  และปิดการใช้งาน output buffering โดยปกติเราเรียกฟังก์ชั่นนี้ที่

บรรทัดสุดท้ายของไฟล์

 

ob_test.php

<?php

ob_start();

echo "ทดสอบ<br>"; //ลองใช้คำสั่ง echo ก่อนเรียก setcookie()

setcookie("Test", "456", time() + 60);

echo "ส่ง cookie ชื่อ Test ไปยังเว็บบราวเซอร์แล้ว";

ob_end_flush();

?>

 

 

About Us | Privacy Policy | Contact Us | ©2006 ComputerGraphs

Hosted by www.Geocities.ws

1