ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
Chapter 10 Session & Cookie
2
Session Server จะไม่สามารถรู้ได้เลยว่าผู้ที่เข้ามาดูเว็บเป็นคนเดียวกัน หรือคนละคน เช่น ไม่รู้ว่า username คนนั้นทำอะไร, ไม่รู้ว่าสินค้าที่เลือกซื้อในรถเข็นเป็นของใคร การแก้ปัญหาดังกล่าว คือ ใช้ตัวแปร Session ซึ่งเป็นตัวแปรที่ถูกสร้างขึ้น เพื่อเป็นตัวแทนผู้เข้าชมเว็บแต่ละคน
3
การใช้ Session เมื่อต้องการใช้ Session จะต้องกำหนดดังนี้
<?php session_start(); ?> <html> <body> </body> </html> เขียนก่อนโค้ด HTML
4
การเก็บสถานการณ์ Login ไว้ใน Session
ตรวจสอบ username/password ในฐานข้อมูล สร้าง session ชื่อผู้ใช้ นำ session ชื่อผู้ใช้ไปใช้ในหน้าอื่นๆ
5
สร้างฟอร์มสำหรับ 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 ให้แสดงว่าผิดพลาด
6
ตรวจสอบ 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"); ?>
7
นำ 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 มาแสดง
8
การ Logout การ Logout คือ การลบ session ปัจจุบันออกไป logout.php
session_start(); unset($_SESSION["memName"]); // กำหนดค่าว่างให้กับ session session_destroy(); header("location: login.php"); // ไปยังหน้า login.php ?>
9
ช่วงอายุของ Session การกำหนดอายุของ Session แต่ละ Server จะแตกต่างกันไปแต่ใน Apache Web Server จะกำหนดในไฟล์ php.ini ซึ่งค่า default จะกำหนดไว้ที่ 24 นาที (1440 วินาที) session.gc_maxlifetime = 1440
10
Cookie คุกกี้ คือ ไฟล์ขนาดเล็กที่ Server ทำการเขียนลงบนเครื่องผู้เข้าชมเว็บ คุกกี้มักใช้ในการระบุตัวตนของผู้ใช้ โดยใช้ร่วมกับ Session เมื่อมีการร้องขอหน้าเว็บเพ็จจากเครื่องเดิมที่เคยเข้าและเขียนคุกกี้แล้ว จะมีการส่งข้อมูลในคุกกี้ไปด้วย
11
Cookie Web server เก็บข้อมูลบนคุกกี้ ดึงข้อมูลจากคุกกี้
Client web browser
12
องค์ประกอบของคุกกี้ ชื่อ username = pocky 1/1/2015 ค่า วันหมดอายุ
13
Cookie รูปแบบการเขียนคุกกี้
setcookie("name", "value", time()+expire_time); time() หมายถึง เวลาในปัจจุบัน expire_time คือ อายุของคุกกี้ มีหน่วยเป็นวินาที การดึงคุกกี้จากเครื่องผู้ใช้จะใช้ตัวแปรดังนี้ $_COOKIE["name"] การลบคุกกี้ setcookie("name", "", time()-expire_time);
14
การใช้คุกกี้ร่วมกับ Session
Session จะมีระยะเวลาจำกัดหากเลยเวลาที่กำหนด เช่น 24 นาที ข้อมูลใน Session จะหายไป การให้ Cookies มาช่วยเก็บข้อมูล Session จะช่วยให้การเข้าเว็บครั้งต่อไปสามารถนำข้อมูลจากคุกกี้มาสร้าง Session ใหม่ได้อัตโนมัติ ตัวอย่างเช่น Facebook เมื่อมีการเชคที่ Keep me logged in จะเก็บสถานการณ์ Login ไว้ในคุกกี้ เมื่อเข้าใช้ครั้งต่อไปจะสร้าง Session ของผู้ใช้ จากคุกกี้อัตโนมัติ
15
การใช้คุกกี้ร่วมกับ Session
login.php จะทำการเพิ่ม checkbox เพื่อถามผู้ใช้ว่าต้องการเก็บข้อมูลลงบนเครื่องที่ใช้หรือไม่ checkLogin.php เพิ่มการเขียนคุกกี้เมื่อตรวจสอบ username และ password สำเร็จ index.php เพิ่มการดึงคุกกี้ที่เขียนไว้ ออกมาสร้าง Session ใหม่ logout.php ลบคุกกี้หลังจากทำลาย Session เสร็จแล้ว
16
สร้างฟอร์มสำหรับ 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 หากมีการเลือกจะทำการเก็บข้อมูลลงคุกกี้
17
เขียน 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 ลงในคุกกี้
18
การดึงคุกกี้ในครั้งต่อไป
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(); ?>
19
การลบคุกกี้หลัง Logout
logout.php <?php session_start(); session_destroy(); setcookie("username", "", time()-3600); header("location: login.php"); ?> กำหนดค่าว่างให้กับตัวแปรคุกกี้ และกำหนดอายุคุกกี้ให้สิ้นสุดลง
20
การสร้างตะกร้าสินค้าด้วย Session
ฟังก์ชันเพิ่มสินค้าลงตะกร้า ฟังก์ชันลบสินค้าจากตะกร้า ฟังก์ชันปรับปรุงสินค้าในตะกร้า ดูโค้ดทั้งหมดที่ไฟล์ cart.php
21
ฟังก์ชันเพิ่มสินค้าลงตะกร้า
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
22
ฟังก์ชันลบสินค้าจากตะกร้า
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
23
การดึงข้อมูลจาก $_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>
24
ผลลัพธ์ 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>
25
เขียน 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>
26
การสร้างใบสั่งซื้อ 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 :25:14 wait productid qty 2 1 5 ตาราง item item_id order_id product_id qty 1 2 5
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.