หน้าเว็บ

วันอาทิตย์ที่ 6 มิถุนายน พ.ศ. 2553

เรื่องของ 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(ชื่อตัวแปร [, ชื่อตัวแปร ... ])
 
สำหรับตัวอย่างต่อไปนี้เราจะใช้ไฟล์ 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< b r>< b r>
< ? 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['usernae'];
msession_register("username");
? >
ชื่อผู้ใชี่คุณป้อนมาให้คือ
< ? php
echo $_SESSION['username'] ;
? >
< br >< a href="session_file3.php">คลิกตรงนี้เพื่อไปยังไฟล์ session_file3.php
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 มากำหนดเป็นตัวแปรให้เราสามารถตรวจสอบค่าได้ต่อไป
 
ฟังก์ชั่นที่ใช้ส่ง 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 ได้ถูกส่งไปยังเว็บบราวเซอร์แล้ว";
? >

< 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 "ทดสอบ
"; //ลองใช้คำสั่ง echo ก่อนเรียก setcookie()
setcookie("Test", "456", time() + 60);
echo "ส่ง cookieชื่อ Test ไปยังเว็บบราวเซอร์แล้ว";
ob_end_flush();
? >

ไม่มีความคิดเห็น:

แสดงความคิดเห็น