Chapter 10 Session & Cookie.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Chapter 11 Ajax.
Advertisements

บทที่ 4 PHP with Database
เสรี ชิโนดม MS SQLServer 7 เสรี ชิโนดม
12. การบันทึกข้อมูลลงในตาราง
Ajax อ.วชิระ หล่อประดิษฐ์ ระบบสารสนเทศทางคอมพิวเตอร์
กลุ่มคำสั่ง SQL สามารถแบ่งได้ดังนี้
คลิกเพื่อเพิ่มชื่อเรื่อง
Chapter IV : สร้างการติดต่อ
Chapter VI : การบันทึกข้อมูลผ่านเว็บเพจ
Chapter VII : การแก้ไขข้อมูล
STREAMING PRO.
FORM อ.กันทิมา อ่อนละออ
Location object Form object
ระบบตะกร้าและระบบชำระเงิน Shopping Cart + Payment
PHP LANGUAGE.
ASP [#15] การใช้งาน ASP กับ Mysql ผ่าน ODBC การทำสมุดเยี่ยม Guestbook
ASP [#12] ตัวอย่าง VBScript เพื่อใช้ตรวจสอบค่าบนฟอร์ม
Madoo Shop ร้านเช่าวีซีดี
Madoo Shop ร้านเช่าวีซีดี
การเขียนโปรแกรมออนไลน์
ASP:ACCESS Database.
Seree Chinodom Recordset Object Seree Chinodom Computer Science, BUU.
ASP:ACCESS Database.
การเชื่อมต่อฐานข้อมูลด้วย PHP
– Web Programming and Web Database
– Web Programming and Web Database
PHP session / Login Professional Home Page :PHP
Php with Database Professional Home Page :PHP
แก้ไขข้อมูลที่ไม่สามารถกรอกเป็นภาษาไทยได้
Electronic Commerce Session and Cookies.
Electronic Commerce เว็บฟอร์ม (Web Form).
PHP Cookies / Session.
การสร้างช่องรับข้อมูล
Information Technology Project Management
คือระบบที่รวบรวมข้อมูลไว้ในที่เดียวกัน ซึ่ง ประกอบไปด้วยแฟ้มข้อมูล (File) ระเบียน (Record) และ เขตข้อมูล (Field) และถูกจัดการด้วยระบบ เดียวกัน โปรแกรมคอมพิวเตอร์จะเข้าไปดึงข้อมูล.
Software Engineering Project Presentation
1. 2  ในการใช้งานเว็บไซต์ โดยปกติเราจะไม่สามารถ ใช้งานตัวแปรที่มีลักษณะ Global ที่สามารถ นำไปใช้ได้กับเว็บเพจหน้าอื่นๆ ปกติในการใช้ งานค่าต่างๆ ของเว็บเพจ.
HTML, PHP.
SQL Structured Query Language.
การสร้างและใช้งานฟังก์ชั่น
CHARPTER 3 การสอบถามข้อมูลพื้นฐาน
Extra_08_Test_Modular_Calculator
PHP & MySQL ระบบจัดการสินค้า
การชี้แจงวิธีการใช้งาน ระบบติดตามออนไลน์
การเขียนโปรแกรม PHP เชื่อมต่อกับ MySQL
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
PHP for Web Programming
ฟังก์ชัน.
การใช้ PHP ติดต่อฐานข้อมูลMySQL
CHAPTER 12 FORM.
SHOPPING ONLINE เว็บที่ให้บริการเปิดร้านค้า สำเร็จรูป.
การสั่งซื้อสินค้า ทางอินเตอร์เน็ต
คำสั่งทำซ้ำ for คำสั่ง for เป็นคำสั่งทำซ้ำในลักษณะ Definite loop คือทราบจำนวนรอบที่แน่นอนในการทำงาน ซึ่งจะใช้ตัวแปร 1 ตัวในการนับจำนวนรอบว่าครบตามกำหนดหรือไม่
CHAPTER 12 SQL.
Introduction to PHP, MySQL – Special Problem (Database)
SQL Structured Query Language.
Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
Introduction to PHP, MySQL – Special Problem (Database) Choopan Rattanapoka.
PHP with MySQL.
การเขียนโปรแกรมบนเว็บ PHP กับ MySQL
หน้าจอการสืบค้น (OPAC)
การใช้ PHP ติดต่อฐานข้อมูล
อาจารย์ชนิดา เรืองศิริวัฒนกุล หลักสูตรสาขาวิชาเทคโนโลยีสารสนเทศ
โครงสร้างพื้นฐานของ JavaScript
สำนักวิชาเทคโนโลยีสารสนเทศและการสื่อสาร มหาวิทยาลัยนเรศวร พะเยา
PHP Html Form && Query string
1 Introduction to SQL กนกวรรธน์ เซี่ยงเจ็น สำนักวิชาเทคโนโลยีสารสนเทศ และการสื่อสาร มหาวิทยาลัยนเรศวร วิทยาเขต สารสนเทศพะเยา.
Form.
การสมัครเข้าใช้งานโปรแกรม (การขอ Username/ Password)
ใบสำเนางานนำเสนอ:

Chapter 10 Session & Cookie

Session Server จะไม่สามารถรู้ได้เลยว่าผู้ที่เข้ามาดูเว็บเป็นคนเดียวกัน หรือคนละคน เช่น ไม่รู้ว่า username คนนั้นทำอะไร, ไม่รู้ว่าสินค้าที่เลือกซื้อในรถเข็นเป็นของใคร การแก้ปัญหาดังกล่าว คือ ใช้ตัวแปร Session ซึ่งเป็นตัวแปรที่ถูกสร้างขึ้น เพื่อเป็นตัวแทนผู้เข้าชมเว็บแต่ละคน

การใช้ Session เมื่อต้องการใช้ Session จะต้องกำหนดดังนี้ <?php session_start(); ?> <html> <body> </body> </html> เขียนก่อนโค้ด HTML

การเก็บสถานการณ์ Login ไว้ใน Session ตรวจสอบ username/password ในฐานข้อมูล สร้าง session ชื่อผู้ใช้ นำ session ชื่อผู้ใช้ไปใช้ในหน้าอื่นๆ

สร้างฟอร์มสำหรับ Login login.php <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <form action="checkLogin.php" method="POST"> Username: <input type="text" name="username"><br> Password: <input type="password" name="password"> <input type="submit"> </form> <?php if ($_GET["error"]=="1"): ?> <div style="color: red;">รหัสผ่านไม่ถูกต้อง</div> <?php endif; ?> </body> </html> ใช้สำหรับตรวจสอบว่า Login ถูกต้องหรือไม่ โดยดูจากค่าพารามิเตอร์ชื่อ error ถ้าเป็น 1 ให้แสดงว่าผิดพลาด

ตรวจสอบ username/password ในฐานข้อมูล แล้วสร้าง session ชื่อผู้ใช้ checkLogin.php <?php session_start(); $conn = mysql_connect("localhost", "root", "1234"); if ($conn) { mysql_select_db("blueshop"); mysql_query("SET NAMES utf8"); } else { echo mysql_errno(); } $username = $_POST["username"]; // 1. รับ username และ password $password = $_POST["password"]; // 2. สร้าง SQL ในการตรวจสอบ $sql = "SELECT * FROM member WHERE username = '$username' AND password = '$password'"; $objQuery = mysql_query($sql); $objResult = mysql_fetch_array($objQuery); // ถ้ามีผลลัพธ์ในการ Query if ($objResult) { $_SESSION["memName"] = $objResult["member_name"]; // 3. นำชื่อผู้ใช้จากฐานข้อมูลเก็บลงตัวแปร session ชื่อ memName header("location: index.php"); // ส่งไปยังหน้า index.html // ถ้าไม่มีผลลัพธ์จากการ Query แสดงว่าชื่อและรหัสผิด ให้กลับไปหน้า Login ใหม่ header("location: login.php?error=1"); ?>

นำ session ชื่อผู้ใช้ไปใช้ในหน้าอื่นๆ hello.php <?php session_start(); ?> <html> <head> <meta charset="utf-8"> </head> <body> <?php echo $_SESSION['memName'] ?> มาแล้ว </body> </html> index.php <?php session_start(); ?> <html> <head> <meta charset="utf-8"> </head> <body> สวัสดี <?php echo $_SESSION['memName'] ?> </body> </html> ดึงค่าจาก Session มาแสดง

การ Logout การ Logout คือ การลบ session ปัจจุบันออกไป logout.php session_start(); unset($_SESSION["memName"]); // กำหนดค่าว่างให้กับ session session_destroy(); header("location: login.php"); // ไปยังหน้า login.php ?>

ช่วงอายุของ Session การกำหนดอายุของ Session แต่ละ Server จะแตกต่างกันไปแต่ใน Apache Web Server จะกำหนดในไฟล์ php.ini ซึ่งค่า default จะกำหนดไว้ที่ 24 นาที (1440 วินาที) session.gc_maxlifetime = 1440

Cookie คุกกี้ คือ ไฟล์ขนาดเล็กที่ Server ทำการเขียนลงบนเครื่องผู้เข้าชมเว็บ คุกกี้มักใช้ในการระบุตัวตนของผู้ใช้ โดยใช้ร่วมกับ Session เมื่อมีการร้องขอหน้าเว็บเพ็จจากเครื่องเดิมที่เคยเข้าและเขียนคุกกี้แล้ว จะมีการส่งข้อมูลในคุกกี้ไปด้วย

Cookie Web server เก็บข้อมูลบนคุกกี้ ดึงข้อมูลจากคุกกี้ Client web browser

องค์ประกอบของคุกกี้ ชื่อ username = pocky 1/1/2015 ค่า วันหมดอายุ

Cookie รูปแบบการเขียนคุกกี้ setcookie("name", "value", time()+expire_time); time() หมายถึง เวลาในปัจจุบัน expire_time คือ อายุของคุกกี้ มีหน่วยเป็นวินาที การดึงคุกกี้จากเครื่องผู้ใช้จะใช้ตัวแปรดังนี้ $_COOKIE["name"] การลบคุกกี้ setcookie("name", "", time()-expire_time);

การใช้คุกกี้ร่วมกับ Session Session จะมีระยะเวลาจำกัดหากเลยเวลาที่กำหนด เช่น 24 นาที ข้อมูลใน Session จะหายไป การให้ Cookies มาช่วยเก็บข้อมูล Session จะช่วยให้การเข้าเว็บครั้งต่อไปสามารถนำข้อมูลจากคุกกี้มาสร้าง Session ใหม่ได้อัตโนมัติ ตัวอย่างเช่น Facebook เมื่อมีการเชคที่ Keep me logged in จะเก็บสถานการณ์ Login ไว้ในคุกกี้ เมื่อเข้าใช้ครั้งต่อไปจะสร้าง Session ของผู้ใช้ จากคุกกี้อัตโนมัติ

การใช้คุกกี้ร่วมกับ Session login.php จะทำการเพิ่ม checkbox เพื่อถามผู้ใช้ว่าต้องการเก็บข้อมูลลงบนเครื่องที่ใช้หรือไม่ checkLogin.php เพิ่มการเขียนคุกกี้เมื่อตรวจสอบ username และ password สำเร็จ index.php เพิ่มการดึงคุกกี้ที่เขียนไว้ ออกมาสร้าง Session ใหม่ logout.php ลบคุกกี้หลังจากทำลาย Session เสร็จแล้ว

สร้างฟอร์มสำหรับ Login login.php <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="checkLogin.php" method="POST"> Username: <input type="text" name="username"><br> Password: <input type="password" name="password"><br> <input type="checkbox" name="remember"> จำการเข้าสู่ระบบที่เครื่องนี้ <input type="submit"> </form> <?php if ($_GET["error"]=="1"): ?> <div style="color: red;">รหัสผ่านไม่ถูกต้อง</div> <?php endif; ?> </body> </html> เพิ่ม checkbox หากมีการเลือกจะทำการเก็บข้อมูลลงคุกกี้

เขียน username ลงคุกกี้ checkLogin.php <?php session_start(); $conn = mysql_connect("localhost", "root", "1234"); if ($conn) { mysql_select_db("blueshop"); mysql_query("SET NAMES utf8"); } else { echo mysql_errno(); } $username = $_POST["username"]; $password = $_POST["password"]; $sql = "SELECT * FROM member WHERE username = '$username' AND password = '$password'"; $objQuery = mysql_query($sql); $objResult = mysql_fetch_array($objQuery); if ($objResult) { $_SESSION["memName"] = $objResult["member_name"]; if ($_POST["remember"] == "on") { // 60 sec * 60 min * 24 hours * 30 days setcookie("username", $username, time()+60*60*24*30); header("location: index.php"); // ส่งไปยังหน้า index.html header("location: login.php?error=1"); ?> ถ้ามีการเลือก checkbox ให้เขียนชื่อ username ลงในคุกกี้

การดึงคุกกี้ในครั้งต่อไป main.php <?php session_start(); ?> <?php $cookie = $_COOKIE["username"]; // ดึงคุกกี้ที่เขียนไว้แล้วออกมา if (!empty($cookie)) { // หากคุกกี้ไม่ใช่ค่าว่าง ให้ทำการ Query ข้อมูลสมาชิกออกมาเก็บบน Session $conn = mysql_connect("localhost", "root", "1234"); if ($conn) { mysql_select_db("blueshop"); mysql_query("SET NAMES utf8"); } else { echo mysql_errno(); } $sql = "SELECT * FROM member WHERE username = '$cookie'"; $objQuery = mysql_query($sql); $objResult = mysql_fetch_array($objQuery); $_SESSION["memName"] = $objResult["member_name"]; // สร้าง Session ใหม่อัตโนมัติ ?> <html> <head><meta charset="utf-8"></head> <body> สวัสดี <?php echo $_SESSION['memName'] ?> <a href="logout.php">Log out</a> </body> </html> การทดสอบควรทำให้ Session หมดอายุก่อน โดยรันไฟล์ killsession.php <?php session_start(); session_destroy(); ?>

การลบคุกกี้หลัง Logout logout.php <?php session_start(); session_destroy(); setcookie("username", "", time()-3600); header("location: login.php"); ?> กำหนดค่าว่างให้กับตัวแปรคุกกี้ และกำหนดอายุคุกกี้ให้สิ้นสุดลง

การสร้างตะกร้าสินค้าด้วย Session ฟังก์ชันเพิ่มสินค้าลงตะกร้า ฟังก์ชันลบสินค้าจากตะกร้า ฟังก์ชันปรับปรุงสินค้าในตะกร้า ดูโค้ดทั้งหมดที่ไฟล์ cart.php

ฟังก์ชันเพิ่มสินค้าลงตะกร้า cart.php function addtocart($pid, $q){ // ถ้ามีสินค้าในตะกร้อยแล้ว $_SESSION['cart'] จะเป็น array if (is_array($_SESSION['cart'])){ if (product_exists($pid)) return; $max = count($_SESSION['cart']); // ดึงเอา index ของ array ช่องสุดท้ายออกมา $_SESSION['cart'][$max]['productid'] = $pid; // นำรหัสสินค้าไปเก็บ $_SESSION['cart'][$max]['qty'] = $q; // นำจำนวนสินค้าไปเก็บ // ถ้ายังไม่มีสินค้าใดๆเลยในตะกร้า จะสร้าาง array ใหม่ } else { $_SESSION['cart'] = array(); $_SESSION['cart'][0]['productid'] = $pid; // นำรหัสสินค้าไปเก็บ $_SESSION['cart'][0]['qty'] = $q; // นำจำนวนสินค้าไปเก็บ } รหัสสินค้า ($pid) = 4 จำนวนสินค้า ($q) = 2 รหัสสินค้า ($pid) = 2 จำนวนสินค้า ($q) = 1 รหัสสินค้า ($pid) = 1 จำนวนสินค้า ($q) = 5 $_SESSION['cart'] productid qty 1 2 … 1 max 2 2 1 4 2 1 5

ฟังก์ชันลบสินค้าจากตะกร้า cart.php function removefromcart($pid) { $pid = intval($pid); // แปลงรหัสสินค้าเป็น integer เพื่อใช้ในการเปรียบเทียบ $max = count($_SESSION['cart']); // ดึงจำนวนสินค้าในตะกร้าออกมา for ($i=0;$i<$max;$i++) { // วนลูปค้นหาตามรหัสสินค้า if ($pid==$_SESSION['cart'][$i]['productid']) { // ถ้ารหัสสินค้าตรงกัน unset($_SESSION['cart'][$i]); // ลบสินค้านั้นออก break; } $_SESSION['cart'] = array_values($_SESSION['cart']); // สร้างเป็น array ใหม่ $_SESSION['cart'] productid qty 2 1 4 5 productid qty 2 1 5 4 pid 2 max i 1

การดึงข้อมูลจาก $_SESSION['cart'] cart.php <form name="form1" method="post" action="cart.php"> <input type="hidden" name="action" value=""> <input type="hidden" name="pid" value=""> <table> <? if(is_array($_SESSION['cart'])){ // ถ้ามีการสร้าง array ของตะกร้าสินค้าแล้ว echo '<tr><td>Serial</td><td>Name</td><td>Price</td><td>Qty</td><td>Amount</td><td>Options</td></tr>'; $max=count($_SESSION['cart']); for($i=0;$i<$max;$i++){ // วนลูปดึงสินค้าแต่ชิ้นออกมาแสดง $pid=$_SESSION['cart'][$i]['productid']; $q=$_SESSION['cart'][$i]['qty']; $pname=get_product_name($pid); if($q==0) continue; ?> <tr> <td><?=$i+1?></td><td><?=$pname?></td><td> <?=get_price($pid)?></td> <td><input type="text" name="product<?=$pid?>" value="<?=$q?>" maxlength="3" size="2"></td> <td><?=get_price($pid)*$q?></td><td><input type="button" value="Remove" onclick="del(<?=$pid?>)"></td> </tr> } // end for <tr><td><b>ราคารวม: <?=get_order_total()?> บาท</b></td><td colspan="5" align="right"> <input type="button" value="Clear Cart" onclick="clear_cart()"> <input type="button" value="Update Cart" onclick="update_cart()"> <input type="button" value="สั่งซื้อสินค้า" onclick="window.location='order.html'"> </td></tr> } // end if else{ echo "<tr><td>ไม่มีสินค้าใดๆในตะกร้าสินค้า!</td>"; } </table> </form>

ผลลัพธ์ HTML <form name="form1" method="post" action="cart.php"> <input type="hidden" name="action" value=""> <input type="hidden" name="pid" value=""> <table> <tr> <td>Serial</td><td>Name</td><td>Price</td><td>Qty</td><td>Amount</td><td>Options</td> </tr> <td>1</td><td>Toro</td><td>20</td> <td><input type="text" name="product2" value="2" maxlength="3" size="2"></td> <td>40</td><td><input type="button" value="Remove" onclick="del(2)"></td> <td>2</td><td>MAGNUM</td><td>45</td> <td><input type="text" name="product4" value="1" maxlength="3" size="2"></td> <td>45</td><td><input type="button" value="Remove" onclick="del(4)"></td> <td><b>ราคารวม: 85 บาท</b></td> <td colspan="5" align="right"> <input type="button" value="Clear Cart"onclick="clear_cart()"> <input type="button" value="Update Cart" onclick="update_cart()"> <input type="button" value="สั่งซื้อสินค้า" onclick="window.location='order.html'"> </td> </table> </form>

เขียน JavaScript สำหรับส่งข้อมูล cart.php <script> function del(pid){ if (confirm('คุณต้องการลบสินค้าใช่หรือไม่ ?')){ document.form1.pid.value=pid; // กำหนดรหัสสินค้าที่ต้องการลบ document.form1.action.value='delete'; // กำหนดให้ทำการลบสินค้าในตะกร้า document.form1.submit(); // สั่งให้เริ่ม submit form } function clear_cart(){ if (confirm('คุณต้องการลบสินค้าทั้งหมดใช่หรือไม่ ?')){ document.form1.action.value='clear'; document.form1.submit(); function update_cart(){ document.form1.action.value='update'; </script>

การสร้างใบสั่งซื้อ createOrder.php ตาราง order $_SESSION['cart'] $date=date('Y-m-d'); // ดึงวันที่ปัจจุบันมา ตามรูปแบบที่กำหนด $memName = $_SESSION["memName"]; // ดึงชื่อผู้ใช้จาก session $result=mysql_query("insert into orders values ('', '$memName', '$date', 'wait')"); // เพิ่ม record order ใหม่ // เพิ่มรหัสสินค้าใน record ใหม่ที่สร้างไปก่อนหน้านี้ แล้วนำตัวเลขนั้นมาเป็นหมายเลข order $orderid=mysql_insert_id(); $max=count($_SESSION['cart']); // ดึงจำนวนสินค้าในตะกร้าออกมา for($i=0;$i<$max;$i++){ // วนลูปเพื่อเพิ่มรายการสินค้าในตาราง item $pid=$_SESSION['cart'][$i]['productid']; // ดึงรหัสสินค้าออกมา $q=$_SESSION['cart'][$i]['qty']; // ดึงจำนวนสินค้าออกมา mysql_query("insert into item values ('', $orderid,$pid,$q)"); mysql_insert_id(); // เพิ่มรหัสรายการสินค้า } unset($_SESSION['cart']); // เมื่อการสั่งซื้อเสร็จสิ้น จะทำการลบทุกอย่างออกจากตะกร้า ตาราง order $_SESSION['cart'] order_id username order_date order_status 1 pocky 2013-12-16 23:25:14 wait productid qty 2 1 5 ตาราง item item_id order_id product_id qty 1 2 5