1 / 29

Cookie And Session

Cookie And Session. Cookies. Cookies เป็นวิธีการฝังหรือเก็บข้อมูลขนาดเล็กๆ ไว้ในเครื่องไคลเอนต์ของผู้ใช้งาน Cookies เป็น ตัว แปรใน การดำรงค่าไว้ในเครื่องคอมพิวเตอร์ของผู้ใช้ เพื่อแลกเปลี่ยนข้อมูลข้ามสคริปต์กันได้

tuari
Download Presentation

Cookie And Session

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Cookie And Session

  2. Cookies • Cookies เป็นวิธีการฝังหรือเก็บข้อมูลขนาดเล็กๆ ไว้ในเครื่องไคลเอนต์ของผู้ใช้งาน • Cookies เป็นตัวแปรในการดำรงค่าไว้ในเครื่องคอมพิวเตอร์ของผู้ใช้ เพื่อแลกเปลี่ยนข้อมูลข้ามสคริปต์กันได้ • Cookies โดยทั่วไปจะใช้สำหรับระบุตัวตนและความมีอยู่ของ users ช่วยให้ users ไม่จำเป็นต้อง login ซ้ำซ้อน • Cookies เป็นไฟล์ขนาดเล็กที่ถูกสร้างโดยสคริปต์ทางฝั่ง Server แล้วฝังตัวอยู่บนคอมพิวเตอร์ทางฝั่ง Clients • Cookies เป็นตัวแปรที่สามารถกำหนดอายุได้ หากตัวแปรคุกกี้ถูกประกาศขึ้นมาในสคริปต์ใดๆ กำหนดให้มีอายุ 1 ชั่วโมง แม้ว่าสคริปต์ที่สร้างตัวแปรคุกกี้จะสิ้นสุดการทำงาน แต่หากยังไม่ครบกำหนดเวลา ตัวแปรคุกกี้ก็ยังคงสถานะอยู่ ไม่ถูกทำลาย • ตัวอย่างการใช้งาน เช่น ระบบ Login อัตโนมัติ

  3. Cookies (ต่อ) • Cookies เป็นรูปแบบของการเก็บรักษาข้อมูลบางอย่างไว้บนเครื่องของผู้ใช้ เพื่อจะนำข้อมูลนี้กลับมาใช้ใหม่ในภายหลัง โดยข้อมูลจะเก็บไว้ในรูปแบบของ Text File ธรรมดา • Cookies จะเก็บข้อมูลผู้ใช้งานในเครื่อง ไคลเอนต์ ดังนั้นการจัดเก็บข้อมูลไม่ควรเก็บข้อมูลที่ต้องการเป็นความลับ เช่น รหัสผ่าน ระดับความปลอดภัยของ Cookies จึงค่อนข้างต่ำ • Cookies เป็นการล่วงละเมิดสิทธิของผู้ใช้ ดังนั้นโปรแกรมเว็บเบราเซอร์จึงมีตัวเลือกสำหรับผู้ใช้ สามารถปฏิเสธการบันทึก Cookies จากเว็บไซต์ที่ไม่ต้องการได้

  4. การสร้าง Cookies setcookie(); รูปแบบ setcookie(ชื่อ,ค่าของ cookie) โดยที่ • ชื่อ คือ ชื่อตัวแปร Cookie • ค่าของ cookie คือ ค่าที่กำหนดให้กับชื่อตัวแปร Cookie • ผลจากการสร้าง Cookies จะคืนค่าเป็น true หรือ false • หากมีการกำหนดชื่อคุกกี้ซ้ำกับชื่อที่มีอยู่แล้ว จะเป็นการแทนที่ข้อมูลเดิม

  5. ตัวอย่างการสร้าง Cookie <? $cookie_name="book"; $cookie_value="PHP"; if(setcookie($cookie_name,$cookie_value)){ echo "cookie_name=".$cookie_value; } else { echo "ไม่สามารถบันทึกข้อมูลคุกกี้ได้"; } ?>

  6. การอ่านข้อมูลจาก Cookie การอ่านข้อมูลคุกกี้ จะใช้ตัวแปร $_COOKIE ซึ่งเป็นตัวแปรอาร์เรย์ โดยระบุชื่อของคุกกี้เป็นค่าคีย์ ค่าของคุกกี้จะได้เป็นค่า value ของคีย์ หากคุกกี้นั้นไม่มีอยู่จริง หรือหมดอายุไปแล้ว การอ่านคุกกี้นั้นโดยไม่ตรวจสอบก่อนจะเกิดข้อผิดพลาดขึ้น ดังนั้น เพื่อให้แน่ใจว่ามีคุกกี้นั้นอยู่หรือไม่ ควรตรวจสอบด้วยฟังกช์น isset() ก่อนอ่านเสมอ ตัวอย่างเช่น <? if(isset($_COOKIE['book'])) { echo $_COOKIE['book']; } ?>

  7. ปัญหาของคุกกี้กับเฮดเดอร์ปัญหาของคุกกี้กับเฮดเดอร์ • เนื่องจาก คุกกี้ ถูกจัดเก็บไว้ที่เครื่องของผู้ใช้ ไม่ใช่เก็บที่เซิร์ฟเวอร์ ถึงแม้จะสร้างตัวแปรที่เซิร์ฟเวอร์ หากไม่มีผู้ใช้เรียกข้อมูลเพจนั้นเข้ามา ตัวแปรคุกกี้นั้นก็ยังคงไม่สามารถเรียกใช้ได้ หากเรียกใช้ค่าที่ได้จะเป็น null • การส่งคุกกี้ ไปยังเบราเซอร์จะส่งแบบเฮดเดอร์ ดั งนั้นหากจุสร้างคุกกี้ต้องทำก่อนที่จะส่งข้อมูลอื่นๆไปยังเบราเซอร์ ตัวอย่างเช่น echo “hello”; setcookie(“test”,”abcde”); • Code นี้จะเกิดข้อผิดพลาดเช่นเดียวกับกรณีส่งข้อมูลไปก่อน header สำหรับวิธีการแก้ปัญหาคือหลีกเลี่ยงการส่งข้อมูลใดๆก่อนที่จะสร้าง cookie

  8. การกำหนดอายุและลบคุกกี้การกำหนดอายุและลบคุกกี้ • หากการสร้างคุกกี้ ไม่ได้กำหนดอายุ Cookie จะหมดอายุทันทีที่ปิดเบราเซอร์ แต่โดยทั่วไปมักจะเก็บข้อมูล Cookie ไว้ใช้ในคราวต่อๆไป การกำหนดอายุของคุกกี้ รูปแบบ setcookie(ชื่อ,ค่าของคุกกี้,อายุเป็นวินาที)

  9. การกำหนดอายุคุกกี้ • การกำหนดเวลาของ cookie จะกำหนดเป็นเวลาในหน่วยวินาที เทียบกับเวลาปัจจุบัน โดยอ้างอิงเวลาด้วยฟังก์ชั่น time() ซึ่งจะคืนค่า timestamp ของเวลาปัจจุบัน ดังนั้นสามารถนำอายุของคุกกี้มาบวกเพิ่มเข้าไป • เช่น time()+30 หมายความว่า คุกกี้จะหมดอายุภายใน 30 วินาทีหลังจากนี้ หรือ $expire=time()+(7*24*60*60) // จำนวนวินาทีใน 1 สัปดาห์ Setcookie(“mycookie”,”abcde”,$expire);

  10. การลบคุกกี้ • จากวิธีการกำหนดอายุคุกกี้สามารถนำมาใช้กับการลบคุกกี้ได้ เพราะ PHP ไม่มีฟังก์ชั่นในการลบคุกกี้โดยตรง จึงกำหนดเวลาหมดอายเป็นเวลาที่ผ่านมาแล้ว รูปแบบ setcookie(“ชื่อคุกกี้ที่ต้องการลบ”, “กำหนดค่าอะไรก็ได้”,เวลาที่ผ่านมาแล้ว) เช่น $expire=time()-3600; setcookie(“mycookie”, “”,$expire);

  11. การกำหนดพาธและโดเมน • การกำหนดพาธ หมายถึงจะให้พาธใดที่สามารถใช้งานคุกกี้ได้ หากไม่กำหนดพาธจะใช้คุกกี้ได้เฉพาะพาธที่สร้างคุกกี้เท่านั้น • หากต้องการให้ใช้ได้จากทุกพาธในเว็บให้กำหนดเป็น / • หากต้องการให้พาธอื่นๆ ใช้ได้ด้วยให้ระบุชื่อพาธลงไป เช่น /member/ จะทำให้ใช้คุกกี้ได้จากไดเรกทอรี่ member และไดเรกทอรี่ย่อย เช่น /member/info เป็นต้น • โดเมน หมายถึง โดเมนที่มีสิทธิใช้คุกกี้ ซึ่งปกติแล้วโดเมนที่สร้างคุกกี้จะมีสิทธิใช้คุกกี้นั้นโดยอัตโนมัติ พารามิเตอร์นี้เป็นการอนุญาตให้โดเมนอื่นสามารถใช้คุกกี้ได้ รูปแบบ setcookie(ชื่อ,ค่า,เวลาหมดอายุ,พาธ,โดเมน)

  12. การกำหนดพาธและโดเมน (ต่อ) เช่น $expire=time()+(30*24*60*60); setcookie(“mycookie”, “abcde”,$expire,“/”,“.cru.in.th”); “.cru.in.th” หมายถึง ทุก Subdomain ของ cru.in.th สามารถใช้งานคุกกี้ได้ เช่น http://reg.cru.in.th หรือ www.cru.in.th หรือ www.scit.cru.in.th เป็นต้น

  13. Session • เป็นการจัดเก็บข้อมูลบางอย่างไว้ชั่วคราวที่เซิร์ฟเวอร์ เพื่อให้สามารถนำข้อมูลนั้นมาใช้งานใหม่หลังจากเพจนั้นสิ้นสุดการทำงานไปแล้วและสามารถนำข้อมูลนั้นมาใช้งานที่เพจอื่นๆได้สำหรับลักษณะทั่วไปของเซสชั่นมีดังนี้ • เมื่อผู้ใช้เชื่อมต่อไปยังเว็บไซต์ เซิร์ฟเวอร์จะสร้างรหัสสำหรับการอ้างอิงถึงผู้ใช้ โดยรหัสนี้เรียกว่า Session ID หรือ SID ซึ่งประกอบด้วยตัวเลข 0 ถึง 9 และตัวอักษร a-z จำนวน 32 • ค่า SID จะถูกนำไปใช้ในการอ้างอิงถึงผู้ใช้คนนั้นตลอดการเชื่อมต่อ เมื่อผู้ใช้เลิกการเชื่อมต่อ เช่นการปิดเบราเซอร์จะส่งผลให้ค่า SID ของผู้ใช้คนนั้นยกเลิกไป หากผู้ใช้คนเดิมทำการเชื่อมต่อไปยังเว็บไซต์นั้นใหม่ ค่า SID จะถูกสร้างขึ้นมาใหม่ทุกครั้งเช่นกัน

  14. Session(ต่อ) • เมื่อสร้างข้อมูลแบบเซสชั่น สำหรับผู้ใช้คนใด ก็จะมีผลหรือใช้งานได้เฉพาะกับผู้ใช้คนนั้น ส่วนคนอื่นๆ ไม่สามารถเรียกใช้งานได้ • ข้อมูลแบบเซสวั่นจากเพจหนึ่งจะสามารถนำไปใช้งานที่เพจอื่นๆ ที่ถูกเรียกใช้โดยผู้ใช้ที่เป็นผู้สร้างเซสชั่นนั้นได้ เช่น รูปต่อไปนี้เซสชั่นถูกสร้างขึ้นที่ Page1.php PAGE1.PHP PAGE2.PHP PAGE3.PHP $x=$_SESSION[‘X’] echo $_SESSION[‘X’] $_SESSION[‘X’]=10

  15. Session(ต่อ) • ข้อมูลเซสชั่นที่ถูกสร้างขึ้นจะสามารถใช้งานได้ชั่วระยะเวลาที่เปิดใช้เบราเซอร์อยู่ แต่ไม่เกิน 180 นาที ถ้าปิดเบราเซอร์หรือเวลาเกินกว่า 180 นาที ข้อมูลจะถูกยกเลิกไป หรือนอกจากนี้สามารถสั่งลบขอมูลเซสชั่นเมื่อไม่ต้องการใช้งานต่อไปได้ • เซสชั่นจะมีความเกี่ยวข้องกับคุกกี้โดยเซสชั่นจะใช้การเก็บข้อมูลรหัสแบบคุกกี้ไว้ที่เครื่องของผู้ใช้ แต่ละคน และเมื่อเชื่อมต่อไปยังเซิร์ฟเวอร์ ข้อมูลนี้จะถูกนำไปใช้ในการตรวจสอบว่าเป็นผู้ใช้คนใด ดังนั้นหากเครื่องของผู้ใช้คนใดปฏิเสธการใช้คุกกี้ ก็จะส่งผลถึงเซสชั่นด้วย แต่ปัจจุบันนี้มีการใช้เทคนิค URL Rewriting หรือ นำรหัสเซสชั่นไปต่อท้าย URL ในแบบ Query String ในชื่อตัวแปร PHPSESSID • แม้เซสชั่นจะเป็นการพักเก็บข้อมูลไว้ชั่วคราวคล้ายกับคุกกี้ แต่ทั้งคุกกี้ และเซสชั่นก็มีแนวทางการนำไปใช้งานที่แตกต่างกันไป

  16. ความแตกต่าง Cookie และ Session

  17. การเริ่มการทำงานของเซสชั่นการเริ่มการทำงานของเซสชั่น • ต้องเริ่มด้วยการสั่งให้เซสชั่นเริ่มทำงานด้วยคำสั่ง session_start() โดยต้องกำหนดไว้บนสุดของเพจ เช่น <?phpsession_start(); ?> ข้อควรระวัง คือเนื่องจากเซสชั่นต้องอาศัยคุกกี้เป็นกลไกร่วมด้วย และคุกกี้จะอาศัยการส่งข้อมูลแบบเฮดเดอร์ ทำให้เซสชั่นมีความเกี่ยวพันกับเฮดเดอร์ด้วย ดังนั้นการใช้ฟังก์ชั่น session_start() ต้องทำก่อนการส่งข้อมูลใดๆ ไปที่เบราเซอร์เช่นเดียวกันกับเฮดเดอร์และคุกกี้ มิฉะนั้นจะเกิดข้อผิดพลาดได้

  18. การเก็บข้อมูลด้วยตัวแปร $_SESSION ตัวแปร $_SESSION เป็นตัวแปรอาร์เรย์สำหรับจัดเก็บข้อมูลแบบเซสชั่น ซึ่งตัวแปรนี้จะมีลักษณะเป็น Key/Value โดยที่ Key คือชื่อของเซสชั่น และ Value คือค่าของเซสชั่น การสร้างตัวแปร $_SESSION สามารถสร้างกี่ตัวก็ได้ ตัวอย่างเช่น <? session_start(); $_SESSION['login']="someone"; $_SESSION['password']=$_POST['password']; $_SESSION['userid']=123456; ?>

  19. การนำค่า SESSION ไปใช้ การนำค่าเซสชั่นไปใช้งานต้องระบุผ่านตัวแปร $_SESSION พร้อมระบุชื่อเซสชั่นที่ต้องการ แต่ต้องทำหลังจากที่สั่งเซสชั่นเริ่มทำงานด้วยคำสั่ง session_start(); แต่เนื่องจากตัวแปรเซสชั่นสามารถถูกลบ หรือหมดอายุได้ จึงต้องมีการตรวจสอบว่าเซสชั่นนั้นมีอยู่จริง ด้วยฟังก์ชั่น isset() ก่อนอ่านค่า ตัวอย่างเช่น <? session_start(); if(isset($_SESSION['login'])){ $login=$_SESSION['login']; } echo $login; ?>

  20. การเก็บข้อมูล SESSION (ต่อ) ตัวแปรเซสชั่นสามารถจัดเก็บข้อมูลชนิดอื่นๆ ได้ เช่น อาร์เรย์ ออบเจ็กต์ เป็นต้น สำหรับการจัดเก็บข้อมูลอาร์เรย์ในเซสชั่นนั้น สามารถทำได้เหมือนกับข้อมูลสตริงทุกประการ ตัวอย่างเช่น <? session_start(); $arr=array("cat","dog","mouse","bird","cow"); $_SESSION['animals']=$arr; //เก็บอาร์เรย์ไว้ในเซสชั่น // การนำข้อมูลไปใช้ foreach($_SESSION['animals'] as $value){ echo $value."<BR>"; } // หรือใช้วิธีอื่น เช่น echo "<h4>วิธีใช้ LOOP for</h4>"; for($i=0;$i<count($_SESSION['animals']);$i++){ echo $_SESSION['animals'][$i]."<BR>";}?>

  21. ค่า ID ของ SESSION ค่า Session ID หรือ SID เป็นรหัสที่ถูกกำหนดให้กับผู้ใช้แต่ละคนที่เชื่อมต่อเข้ามายังเว็บไซต์แห่งนั้น ซึ่งค่า SID จะใช้ในการแยกแยะผู้ใช้แต่ละคนออกจากกัน ดังนั้นค่านี้จึงจะไม่ซ้ำกันเลย บางครั้งในการตรวจสอบผู้ใชล้อาจดูจากค่า SID นี้ได้ ถึงแม้ว่า PHP จะกำหนดค่า SID นี้ให้แล้ว แต่ก็สามารถเปลี่ยนเป็นอย่างอื่นได้ ฟังกชั่นเกี่ยวกับ SID คือ session_id() ฟังก์ชั่นนี้ใช้ทั้งในการอ่านค่า SID และการกำหนดค่า ID ให้แก่เซสชั่น รูปแบบคือ $sid=session_id() // อ่านค่า SID session_id(SID) // กรณีต้องการกำหนด SID เช่น echo “Your Curren SID:”.session_id(); session_id(“1234567890abcd”);

  22. การลบข้อมูลเซสชั่น • ปกติเมื่อเบราเซอร์ที่เปิดไว้ถูกปิดทั้งหมด หรือระยะเวลาที่สร้างเซสชั่นเอาไว้นานเกินกว่า 180 นาที (3 ชั่วโมง)ค่าตัวแปรเซสชั่นที่ถูกสร้างขึ้นจะถูกยกเลิกไปเองโดยอัตโนมัติอยู่แล้ว แต่บางครั้งหากต้องการยกเลิกข้อมูลเซสชั่นที่เวลาใดเวลาหนึ่งขณะที่ยังใช้งานเว็บไซต์อยู่ เช่น การ Logout ออกจากระบบเป็นต้น

  23. การลบข้อมูลเซสชั่น (ต่อ) • unset($_SESSION[ชื่อเซสชั่น]) ซึ่งฟังก์ชั่นนี้สามารถนำไปใช้ยกเลิกตัวแปรทั่วๆไปของ PHP ได้ด้วย ตัวอย่างการใช้งาน เช่น $_SESSION[‘login’]=“admin”; unset($_SESSION[‘login’]); echo $_SESSION[‘login’]; //null

  24. การลบข้อมูลเซสชั่น (ต่อ) • session_destroy() เป็นฟังก์ชั่นที่ใช้ในการยกเลิกข้อมูลเซสชั่นทั้งหมดที่ได้สร้างขึ้นให้กับผู้ใช้คนนั้น ตัวอย่างเช่น $_SESSION[‘a’]=“A”; $_SESSION[‘b’]=“B”; echo count($_SESSION); //2 session_destroy(); echo count($_SESSION); //0

  25. WorkShopใช้เชสชั่นกับระบบ Login • ระบบสมาชิกส่วนใหญ่ จะต้องให้สมาชิกล็อกอินเข้าสู่ระบบก่อนที่จะใช้บริการบางอย่างได้ แต่บริการต่าง ๆ อาจถูกจัดไว้คนละเพจ แต่การล็อกอินเข้าสู่ระบบจะทำเพียงครั้งเดียว และอยู่เพจใดเพจหนึ่ง ดังนั้นการที่เพจอื่น ๆ จะได้ทราบได้ว่า ผู้ใช้คนนนั้นได้ล็อกอินเข้าสู่ระบบหรือยัง ต้องใช้การจัดเก็บข้อมูลการล็อกอินไว้ในเซสชั่น โดยมีหลักการดังนี้ • หลังผู้ใช้ล็อกอินเข้าสู่ระบบสำเร็จ ให้จัดเก็บข้อมูลบางอย่างเอาไว้ เช่น เก็บชื่อล็อกอินไว้แบบเซสชั่น • เพจอื่นๆ ที่มีข้อกำหนดว่า ต้องล็อกอินเข้าสู่ระบบจึงจะใช้งานได้ เพจนั้นต้องมีขั้นตอนการตรวจสอบล็อกอินจากเซสชั่นก่อน หากมีข้อมูลแสดงว่าเข้าสู่ระบบแล้ว แต่หากไม่มีก็อาจยกเลิกการใช้งานเพจนั้น • เมื่อมีการเข้าสู่ระบบ ก็ต้องมีการออกจากระบบ หรือการล็อกเอาต์ (Logout) ทั้งนี้การล็อกเอาต์ก็คือการลบข้อมูลการล็อกอินที่เก็บไว้ในเซสชั่นทิ้งไปนั่นเอง

  26. ขั้นตอนการออกแบบและเขียนโค้ดขั้นตอนการออกแบบและเขียนโค้ด • index.phpเพจหลักของการทำงาน • login.phpสำหรับการล็อกอินเข้าสู่ระบบ • logout.phpสำหรับล็อกเอาต์ออกจากระบบ

  27. Index.php <?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="Content-Type" content="text/html; charset=windows-874" /> <title>หน้าหลัก</title></head> <body> <?php if(!isset($_SESSION['login'])) { echo "<h3><font color=red>ท่านยังไม่ได้ Login เข้าสู่ระบบ</font></h3><a href=login.php>คลิกที่นี่เพื่อเข้าสู่ระบบ</a>"; }else { echo "<h3>ยินดีต้อนรับ: {$_SESSION['login']}</h3><a href=logout.php>ออกจากระบบ</a>";}?> </body></html>

  28. login.php <?php session_start(); if(!empty($_POST['login'])) { $_SESSION['login'] = $_POST['login']; header("Refresh: 5; url=index.php"); echo "<h3>ท่านเข้าสู่ระบบแล้ว จะกลับสู่หน้าหลักใน 5 วินาที</h3>"; exit;}?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="Content-Type" content="text/html; charset=windows-874" /> <title>Login</title></head> <body> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="form1" id="form1"> Login: <input type="text" name="login"> <input type="submit" value="เข้าสู่ระบบ"><br> </form> </body> </html>

  29. logout.php <?php session_start(); if(isset($_SESSION['login'])) { unset($_SESSION['login']); header("Refresh: 5; url=index.php"); echo "<h3>ท่านออกจากระบบแล้ว จะกลับสู่หน้าหลักใน 5 วินาที</h3>"; exit;}?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-874" /> <title>Logout</title> </head> <body> </body> </html>

More Related