สำนักวิชาเทคโนโลยีสารสนเทศและการสื่อสาร มหาวิทยาลัยนเรศวร พะเยา Session & Cookie อุทัย เซี่ยงเจ็น สำนักวิชาเทคโนโลยีสารสนเทศและการสื่อสาร มหาวิทยาลัยนเรศวร พะเยา
เนื้อหา ความหมายของ Session Control ความหมายของ Cookie
ความหมายของ Session Control ในการใช้งานเว็บไซต์ โดยปกติเราจะไม่สามารถใช้งานตัวแปรที่มีลักษณะ Global ที่สามารถนำไปใช้ได้กับเว็บเพจหน้าอื่นๆ ปกติในการใช้งานค่าต่างๆ ของเว็บเพจ จำเป็นต้องมีการส่งและรับค่าในลักษณะ GET และ POST จึงจะสามารถนำข้อมูลมาใช้ได้ แต่มีหลายกรณีที่เราต้องการเก็บรักษาข้อมูลบางอย่างไว้ โดยไม่ต้องส่งและรับค่าแบบ GET หรือ POST เราสามารถใช้ Session Control ในการรักษาข้อมูลนี้ไว้ได้ จนกว่าผู้ใช้จะปิดหน้าเว็บเพจทั้งหมดของเว็บไซต์นั้นๆ หรือ Timeout
ความหมายของ Session Control Session ในภาษา PHP จะทำงานโดยสร้าง Session ID โดยการสุ่มตัวเลข โดยหากข้อมูลจัดเก็บอยู่ในฝั่ง Client จะเรียกว่า Cookie แต่ปกติตัวแปร Session จะอยู่ฝั่ง Server โดยที่ Server จะเรียกค้น Session ของผู้ใช้แต่ละคนจาก Session ID
ความหมายของ Cookie คือ ข้อมูลขนาดเล็กที่สคริปต์สามารถเก็บไว้บนเครื่อง Client ได้ ประโยชน์ของการใช้งาน cookie คือใช้เก็บข้อมูลเกี่ยวกับผู้ใช้และข้อมูลที่เว็บไซต์ของเราต้องการ โดยเมื่อเรากลับมาที่เว็บไซต์นี้อีกครั้งเว็บไซต์นั้นๆ จะสามารถอ่าน cookie file เพื่อทำการเตรียมความพร้อมเกี่ยวกับข้อมูลผู้ใช้ ตัวอย่างเช่น เว็บของ hotmail ที่เมื่อนิสิตกลับเข้ามาโดยไม่ได้ Sign Out จะมี Username เดิมปรากฏอยู่เป็นต้น
ความหมายของ Cookie เมื่อ Browser ติดต่อกลับไปยัง URL เดิมที่มีการจัดเก็บ Cookie ไว้ Browser จะค้นหา Cookie ที่มีอยู่ในเครื่องแล้วส่งข้อมูลที่จัดเก็บไว้มายัง Server
ความหมายของ Cookie ชื่อของ Cookie รูปแบบ ค่าของ Cookie Set -Cookie: NAME=VALUE; [expires=DATE;][path=PATH;][domain=DOMAIN_NAME;][secure] NAME ชื่อของ Cookie VALUE ค่าของ Cookie DATE วันที่หมดอายุของ Cookie PATH PATH ที่สามารถเรียกใช้งาน Cookie จะใช้ร่วมกับ DOMAIN_NAME DOMAIN_NAME ชื่อเว็บเซิร์ฟเวอร์ที่สามารถเรียกใช้ Cookie secure ให้ส่ง Cookie ผ่าน HTTP ที่ปลอดภัย
การใช้งาน Cookie รูปแบบ int setcookie(string name [,string value [,int expire [,string path [,string domain [,int secure]]]]]) ใช้กำหนดค่าต่างๆ ของ Cookie โดยมีความหมายเดียวกับการ Set -Cookie ใน HTTP Header
การใช้งาน Cookie <?php setcookie("test", "Hello, Cookie", time()+3600, "/teach/"); echo $HTTP_COOKIE_VARS["test"]; ?> กำหนดให้ Cookie มีชื่อว่า test เก็บค่า Hello, Phayao มีระยะเวลา 1 ชั่วโมง และเรียกใช้งานสคริปต์ภายใต้ PATH ชื่อ teach หากต้องการลบค่า Cookie สามารถใช้คำสั่ง setcookie() แต่ไม่ต้องใส่ค่า Parameter ให้กับฟังก์ชัน
การใช้งาน Cookie ในการใช้งาน Cookie บางครั้ง Browser จะมีการป้องกันไม่ยอมรับ Cookie เนื่องมาจากปัญหาเรื่องความปลอดภัย ดังนั้น PHP ได้ออกแบบให้มีการใช้งาน Cookie โดยใช้ URL ร่วมกับ Session หมายเหตุ: ต้องมีการอนุญาตให้ใช้งาน Session ก่อนจึงจะสามารถใช้งานได้
การกำหนด Cookie ผ่าน Session รูปแบบ void session_set_cookie_params(int lifetime [, string path [, string domain]]) lifetime ช่วงเวลาการทำงานของ Cookie path Path ที่เรียกใช้งาน Cookie domain Domain ที่ใช้เรียก Cookie ฟังก็ชันนี้จะมีการกำหนดค่าพารามิเตอร์ต่างๆ ให้กับ Cookie ด้วย Session
การเรียกใช้ Cookie ผ่าน Session รูปแบบ array session_get_cookie_params() ฟังก็ชันนี้จะมีการรับค่าพารามิเตอร์ต่างๆ จาก Cookie ด้วย Session โดยจะมีการส่ง Lifetime, Path และ Domain กลับออกมาในรูปแบบของอาร์เรย์
การสร้าง และใช้งาน Session <?php // ตัวอย่างการเรียกใช้งาน SESSION session_start(); // หากต้องการใช้งาน $_SESSION ในหน้าเว็บเพจใด ก็ต้องกำหนด $_SESSION['data'] = "Hello, Session" ; echo $_SESSION['data']; ?>
การยกเลิกการใช้งาน Session <?php // ตัวอย่างการยกเลิกการใช้งาน SESSION เช่นการ Logout session_start(); // หากต้องการใช้งาน $_SESSION ในหน้าเว็บเพจใด ก็ต้องกำหนด $_SESSION['data'] = "Hello, Session" ; echo $_SESSION['data']; unset($_SESSION['data']); // ยกเลิกการใช้งาน $_SESSION session_destroy(); // ทำลายตัวแปร $_SESSION ทั้งหมด echo $_SESSION['data']; // ไม่สามารถแสดงข้อมูล $_SESSION ได้เนื่องจากทำลายไปแล้ว ?>
การกำหนด Session Control เราสามารถใช้แฟ้ม php.ini เข้าไปกำหนดค่าของ Session ได้ โดยมี Option ต่างๆ ที่กำหนดคุณสมบัติ ได้ดังตาราง
การกำหนด Session Control ชื่อ Option ค่าเริ่มต้น ผลลัพธ์ session.autostart 0 (disable) กำหนดให้ session เริ่มต้นเองอัตโนมัติ session.cache_expire 180 กำหนดเวลาในการ Load Session Page ใหม่ในหน่วยวินาที session.cookie_domain none กำหนด Domain ให้ Session Cookie session.cookie_lifetime กำหนดอายุของ Session ID ของ Cookie โดยทั่วไปจะมีค่าเป็น 0 คือ เมื่อปิด Browser session.cookie_path / Path ที่กำหนดให้ Session Cookie
การกำหนด Session Control ชื่อ Option ค่าเริ่มต้น ผลลัพธ์ session.name PHPSESSIONID ชื่อของ SESSION ที่ใช้เป็นชื่อบนเครื่องผู้ใช้ session.save_handler files กำหนดที่ที่ข้อมูล SESSION ถูกเก็บ อาจสร้างเป็นฐานข้อมูลได้ แต่ต้องสร้างฟังก์ชันขึ้นมาจัดการเอง session.save_path /tmp PATH ที่ข้อมูล SESSION ถูกจัดเก็บ session.use_cookies 1 (Enabled) กำหนดให้ SESSION สามารถใช้งานฝั่ง Client ได้
การประยุกต์ใช้ Session กับระบบล็อกอิน login.php Authorized User check_login.php mainmenu.php Hacker
TABLE: LOGIN ชื่อฟิลด์ ชนิด คำอธิบาย ชื่อผู้ใช้งานระบบ รหัสผ่าน USERNAME (PK) VARCHAR(20) ชื่อผู้ใช้งานระบบ PASSWORD VARCHAR(40) รหัสผ่าน หมายเหตุ: ปกติในการเก็บรหัสผ่านเราจะไม่เก็บในลักษณะที่สามารถเปิดอ่านได้โดยง่าย ดังนั้น เราจึงนิยมจัดเก็บในรูปแบบของ BLOB มากกว่า VARCHAR แต่เพื่อประโยชน์ในการเรียนการสอน ผู้สอนจึงใช้ VARCHAR เพื่อให้สามารถตรวจสอบได้ง่าย(ในการเรียนการสอน)
login.php <html> <head><title>Login.php</title></head> <body onload="document.all.username.focus();"> <form action="check_login.php" method="post"> <table> <tr> <td>Username:</td> <td><input type="text" name="username"></td> </tr> <tr> <td>Password:</td> <td><input type="password" name="passwd"></td> <tr> <td colspan="2"> <input type="submit" value="Login"> <input type="reset" value="Clear"> </td> </table> </form> </body> </html>
check_login.php <?php require_once("connect_inc.php"); session_start(); // start using session $username = $_POST['username']; $password = $_POST['passwd']; $sql_login = "SELECT * FROM login WHERE USERNAME='" . $username . "' AND PASSWORD='" . $password . "'"; $login_result = mysql_db_query(CURRENT_DB, $sql_login); $login_rows = mysql_fetch_array($login_result); $user = $login_rows["USERNAME"]; if(isset($user)){ $_SESSION[“IS_LOGIN”] = “OK”; $URL = "mainmenu.php"; header("Location: $URL"); } else{ $URL = "login.php?err=1"; ?>
mainmenu.php <?php session_start(); if($_SESSION["IS_LOGIN"] != "OK"){ // Unauthorized user $URL = "login.php?err=2"; header("Location: $URL"); } // if login complete you can show menu echo "MAIN MENU DETAIL"; ?>