ถ้างั้นผมจะขออธิบายเรื่อง session แล้วกันนะครับ จริงๆ แล้ว session มันก็เป็นไฟล์ๆ นึงที่เก็บอยู่ฝั่ง server พอ client 1 thread เปิดหน้าเว็บขึ้นมา แล้วหน้าเว็บนั้นมีการใช้ session ก็จะมีการสร้างไฟล์ขึ้นมาไฟล์นึง ส่วนจะเก็บอยู่ตรงไหนนั้นขึ้นอยู่กับค่า session_save_path ของ php ซึ่งจะสามารถแก้ไขหรือเปิดดูได้อยู่ในไฟล์ php.ini อันนี้ก็แล้วแต่อีกว่า server เป็นอะไร ที่เก็บไฟล์ php.ini ก็จะไม่เหมือนกัน ในการใช้ session นั้น หน้าไหนมีการใช้ session ก็ให้ขึ้นต้นหน้านั้นๆด้วย session_start(); ตรงนี้สำคัญมากนะครับ ฟังก์ชั่นนี้จะต้องอยู่บนสุดเสมอ จะมีข้อความอะไรอยู่ก่อนไม่ได้เลย ยกตัวอย่างนะครับ
<?php
session_start();
?>
<html>
<head>........</head>
<body>
.......
.......
.......
</body>
</html>
อันนี้เป็นตัวอย่างที่ผิดนะครับ อย่านำไปใช้
<html>
<head>........</head>
<body>
<?php
session_start();
?>
.......
.......
.......
</body>
</html>
นี่แค่เป็นการเริ่มต้นใช้ session เท่านั้น ยังมีฟังก์ชั่นอื่นที่เกี่ยวข้องอีกครับ อย่างเช่น session_register(), session_unregister(), session_is_registered(), session_destroy()
จะขออธิบายคร่าวๆนะครับ session_register() ใช้สำหรับประกาศตัวแปร session ครับ
ตัวอย่าง
a.php<?php
session_start();
$barney = "A big purple dinosaur.";//line a
session_register("barney");//line b
$zim = "An invader from another planet.";
session_register("zim");
$spongebob = "He's got square pants.";
session_register("spongebob");
?>
ให้สังเกตุค่าพารามิเตอร์กับชื่อของตัวแปรครับ จะต้องเหมือนกันเท่านั้น ลองดูที่สองบันทัดคือบันทัด a กับบันทัด b หมายความว่าประกาศตัวแปร session ชื่อ barney และให้ค่าเป็น "A big purple dinosaur." (สองบันทัดนี้สามารถสลับที่กันได้) บันทัดอื่นๆก็เช่นเดียวกัน ส่วนการนำไปใช้ในหน้าถัดไป ก็ให้ใช้แบบนี้ครับ
b.php<?php
session_start();
echo "barney : ".$_SESSION["barney"]."<br />";
echo "zim : ".$_SESSION["zim"]."<br />";
echo "spongebob : ".$_SESSION["spongebob"]."<br />";
?>
จะนำไปบวกลบคูณหารก็จัดการเองนะครับ สำหรับกรณีที่เราไม่อยากที่จะใช้ฟังก์ชั่น session_register() นั้นก็มีทางเลือกอีกสองทางครับ เรามาดูตัวอย่างในทำนองเดียวกันครับ แต่เขียนอีกแบบหนึ่ง
a.php<?php
session_start();
$_SESSION["barney"] = "A big purple dinosaur.";
$_SESSION["zim"] = "An invader from another planet.";
$HTTP_SESSION_VARS["spongebob"] = "He's got square pants.";
?>
การนำไปใช้
b.php<?php
session_start();
echo "barney : ".$_SESSION["barney"]."<br />";
echo "zim : ".$_SESSION["zim"]."<br />";
echo "spongebob : ".$HTTP_SESSION_VARS["spongebob"]."<br />";
?>
การประกาศใช้ตัวแปร session นั้นในทาง physical หมายความว่ามันจะไปสร้างชื่อตัวแปรและเก็บค่าชื่อกับตัวแปรที่เราสร้างขึ้นมาไว้ในไฟล์ session ของเรานั่นเอง(ตรงนี้สามารถเปิดดูได้ แต่เราต้องรู้ก่อนว่าไฟล์ session ของเรานั้นเก็บไว้ที่ไหน ถ้าอยากรู้ให้ใช้ฟังก์ชั่น session_save_path())
สำหรับ session_unregister() นั้นมีไว้สำหรับประกาศยกเลิกการใช้ตัวแปรครับ อันนี้จะยกเลิกเป็นตัวๆไปครับ ตัวอย่างนะครับ
c.php<?php
session_start();
session_unregister("barney");
?>
จากโค้ดหมายความว่าเราจะประกาศยกเลิกใช้ตัวแปรชื่อ "barney" ครับ ซึ่งในทาง physical ก็คือมันจะไปลบค่าออกจากไฟล์ session ของเรานั่นเอง
ฟังก์ชั่น session_is_registered() นั้นใช้สำหรับตรวจเช็คว่าชื่อตัวแปรดังกล่าวได้ถูกประกาศใช้ไปหรือยัง ตัวอย่างเช่น
d.php<?php
session_start();
if(session_is_registered("barney")) {
echo "barney : was registered<br />";
}
if(session_is_registered("zim")) {
echo "zim : was registered<br />";
}
if(session_is_registered("spongebob")) {
echo "spongebob : was registered<br />";
}
?>
ถ้าเรารันโปรแกรมมาตามลำดับ a.php, b.php, c.php จนถึง d.php เราจะเห็นว่า barney ถูกทำลายไปแล้วกรณีนี้ จะไม่พิมพ์ค่า "barney : was registered" ออกมา
ส่วน session_destroy() นั้นจะเป็นการทำลายตัวแปร session ทุกตัวของเราครับคือทำลายยกชุด ไม่ได้ทำลายแค่ตัวใดตัวหนึ่งครับ
ตัวอย่าง
e.php<?php
session_start();
session_destroy();
if(session_is_registered("barney")) {
echo "barney : was registered<br />";
}
if(session_is_registered("zim")) {
echo "zim : was registered<br />";
}
if(session_is_registered("spongebob")) {
echo "spongebob : was registered<br />";
}
?>
กรณีนี้จะไม่พิมพ์ค่าใดๆออกมาเลย เพราะโดนทำลายค่าไปหมดแล้วครับ
ยังมีฟังก์ชั่นอื่นๆที่เกี่ยวข้องอีกมากมายครับ แต่ไม่ค่อยจะได้ใช้(หรือว่าผมไม่ได้ใช้เองก็ไม่รู้) แต่อาจจะมีประโยชน์ก็ได้นะครับ ก็ลองไปศึกษาเพิ่มเติมดูครับ
ที่มา http://www.php.net