งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

Cookies Sessions Headers

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "Cookies Sessions Headers"— ใบสำเนางานนำเสนอ:

1 Cookies Sessions Headers
6 State management Cookies Sessions Headers HTTP เป็นโปรโตคอลใช้ส่งข้อมูลระหว่างเบาร์เซอร์ และเว็บไซต์ต่างๆ แต่จะน้อยคนจะรู้ว่า HTTP เป็น โปรโตคอลแบบ stateless ซึ่งหมายความว่า ทุกทำส่งที่ส่งมายังเว็บเซอร์เวิร์บ เป็นคำสั่งอิสระ ที่ถือเป็นคำสั่งหนึ่งๆ ที่แยกต่อกัน การใช้งานคำสั่งที่แยกต่อกันนี้ยากที่จะรู้ว่า คำสั่งก่อนหน้านี้สัมพันธ์กับคำสั่งที่ส่งมาใหม่ ซึ่งสำคัญ กับธุรกิจออนไลน์ หรือบริการที่ต้องการรู้ว่าใครทำอะไรไว้บ้าง ที่ต่อเนื่องหรือสัมพันธ์ต่อกัน PHP ใช้ cookies และ sessions เป็นจัดการกับปัญหานี้ ที่ใช้สร้างเป็น cookies หรือ sessions ได้อย่างไม่ง่ายดาย และนอกจากนี้ ในสไลด์นี้ยังอธิบายการส่ง headers ไปยังเบราเซอร์แทนการใช้ค่าปริยาย อ.ธีระพล ลิ้มศรัทธา

2 Working with Cookies Cookies basics Cookie Attributes Cookie Headers
Setting Cookies Reading Cookies Removing Cookies

3 Cookies Basics คุกกี้เป็นไฟล์เล็กๆ ที่เก็บอยู่บนเคลื่อนของไคลเอ็นท์ คุกกี้ หนึ่งยาวได้ไม่เกิน ๔ กิโลไบท์ คุกกี้ถูกใช้เพื่อให้เครื่องเซิร์บเวอร์จดจำเครื่องลูกได้ คุกกี้สามารถอ่านได้เฉพาะเว็บไซต์ หรือโดเมนที่เป็นเจ้าของ คุกกี้เท่านั้น หนึ่งโดเมนหนึ่งอ่านได้ไม่เกิด ๒๐ คุกกี้ จำนวนคุกกี้มากที่สุด อาจกำหนดได้โดยระบบของผู้ใช้งาน เอง และมักเป็น ๓๐๐ คุกกี้ คุกกี้คือเท็กไฟล์ ที่เก็บไว้ระบบของผู้ใช้งานเว็บไซต์ ไฟล์นี้ประกอบด้วยข้อมูลที่เว็บไซต์สามารถอ่านกลับได้ ทำให้เว็บไซต์รูปว่าผู้ใช้เป็นผู้ใช้ที่เคยแวะมายังเว็บไซต์นี้ ตัวอย่างเช่น การที่เก็บเว็บไซต์รู้ว่าควรจะแสดงผลเนื้อหาของเว็บไซต์ให้เหมาะสมกับผู้ใช้งาน เนื้อจากทราบว่าใครเป็นผู้ใช้บริการ จึงสามารถแสดงผลได้ตามความสนใจของผู้ใช้งานแต่ละรายได้ การส่งคุกกี่เป็นการส่งจากเว็บไซต์ไปเก็บที่ระบบของผู้ใช้งานเว็บไซต์จึงอาจมีอัตรายกับผู้ใช้งานได้ หากผู้บริการเว็บไซต์ประสงค์ร้าย หรือผู้อ่านที่นำคุกกี่ไปใช้ในทางไม่ดี ดังนั้น ความปลอดภัยจึงเป็นประเด็นที่ควรให้ความสำคัญกับ คุกกี้ คุกกี้มีคุณสมบัติด้านความปลอดภัย คือ คุกกี้สามารถอ่านได้เฉพาะเว็บไซต์ หรือโดเมนที่เป็นเจ้าของคุกกี้เท่านั้น หนึ่งโดเมนหนึ่งอ่านได้ไม่เกิด ๒๐ คุกกี้ คุกกี้หนึ่งยาวได้ไม่เกิน ๔ กิโลไบท์ จำนวนคุกกี้มากที่สุด อาจกำหนดได้โดยระบบของผู้ใช้งานเอง และมักเป็น ๓๐๐ คุกกี้

4 Cookie Attributes Attribute Description Example Name=value
ชื่อและค่าของคุกกี้ Expires วันหมดอายุ ‘expires=Monday , 25-Jan-12 23:59:59 IST’ Domain เป็นโดเมนของคุกกี้ ‘domain=thaiweb.com’ Path เป็นเส้นทางที่อ้างอิงตามโดเมน ‘path=/’ Secure เมื่อมีการใช้คุกกี้แอททริบิ้วนี้ จะต้องอ่านคุกกี้ด้วยการต่อเชื่อมแบบ secure HTTP ‘secure’ แอททริบิ้วส์ ของคุกกี้ มีด้วยกันหลายตัว แต่มีห้าตัวที่ใช้กันเป็นพื้นฐานคือ Name ชื่อและค่าของคุกกี้ Expire วันหมดอายุ Domain เป็นโดเมนของคุกกี้ และเฉพาะโดเมนนี้เท่านั้นที่อ่านคุกกี้นี้ได้ Path เป็นเส้นทางที่อ้างอิงตามโดเมน การกำหนด “/” เป็นการบอก server root และทำให้โดเมนนี้(ทั้งหมด) อ่านคุกี้นี้ได้ Secure เมื่อมีการใช้คุกกี้แอททริบิ้วนี้ จะต้องอ่านคุกกี้ด้วยการต่อเชื่อมแบบ secure HTTP

5 Cookie Headers คุกกี้จะถูกส่งระหว่างผู้ใช้งานเว็บไซต์กับ เว็บไซต์ให้บริการ โดยผ่าน HTTP headers Set-Cookie: username=john; path=/; domain=.thiswebsite.com; expires=Friday, 25-Jan-08 23:59:50 IST Set-Cookie: location=UK; path=/; domain=.thiswebsite.com; คุกกี้จะถูกส่งระหว่างผู้ใช้งานเว็บไซต์กับ เว็บไซต์ให้บริการ โดยผ่าน HTTP headers ยกตัวอย่างเช่น การกำหนดคุกกี้ เว็บไซต์จะต้องส่ง Set-Cookie ที่ เฮดเดอร์จะประกอบด้วยข้อมูลของคุกกี้ ดังเขียนเป็นตัวอย่างว่า Set-Cookie: username=john; path=/; domain=.thiswebsite.com; expires=Friday, 25-Jan-08 23:59:50 IST Set-Cookie: location=UK; path=/; domain=.thiswebsite.com; ทำนองเดียววกันกับ ถ้าคุกกี้ตัวหนึ่งใช้สำหรับเว็บไซต์หนึ่ง เบราเซอร์ของผู้ใช้จะส่งข้อมูลของคุกกี้ ใน ‘Cookie:’ ไว้ในเฮดเดอร์ เมื่อผู้ใช้ใช้บริการเว็บไซต์เจ้าของคุกกี้ ดังเขียนได้ว่า Cookie: username=john; location=UK

6 การอ่านคุกกี้จากระบบ ในเครื่องเราเอง
Internet Explorer เก็บคุกกี้ไว้ใน C:/Documents and Settings/[username]/cookies Mozila Firefox เก็บคุกกี้ไว้ที่ C:/Documents and Settings/[username]/Application Data/Mozilla/Firefox/Profiles/[profilename]/cookies.txt. Google Chrome เก็บที่ใด

7 Setting Cookies <?php // set multiple cookies setcookie('username', 'whitewhale', time() , '/'); setcookie(' ', time()+86400, '/'); setcookie('role', 'moderator', time()+3600, '/');//one hour ?> การส่งค่าคุกกี้เมื่อส่งสำเร็จ จะคืนค่า true แต่ไม่รับประกันว่าส่งแล้วจะมีการ บันทึกในระบบของผู้ใช้บริการเว็บไซต์หรือไม่ เส้นทาง “/” จะหมายถึง ใช้ได้ทั้งโดเมน และซับโดเมน คือ 1 วัน (24x60x60) การใช้ PHP ทำงานกับคุกกี้เป็นเรื่องง่ายๆ เพียงใช้ฟังก์ชัน setcookie( ) ซี่งสามารถใช้ได้ทั้ง การกำหนดค่า หรืออ่านค่า ฟังก์ชันนี้รับตัวแปรเข้า หกตัว คือ name, value, expire (Unix time stamp), domain, path, secure คุกกี้จะคืนค่า true ถ้าการส่งคุกกี้ทำงานสำเร็จ แต่ถ้าไม่ได้บอกว่า การจัดเก็บในระบบของผู้ใช้เบราเซอร์สำเสร็จหรือไม่ (เป็นไปได้ว่าผู้ใช้ไม่อนุญาตให้บันทึกคุกกี้ในระบบ) ตัวอย่างการเขียนเข่น <?php // set a cookie setcookie(' ', mktime() , '/'); ?> แต่ก็อาจเขียนได้หลายคกกี้พร้อมกันก็ได้ ดังตัวอย่างในสไลด์นี้

8 ข้อควรระวัง: คุกกี้เขียนที่เฮดเดอร์ไฟล์
ปัญหา Warning: Cannot modify header information - headers already sent by ... ข้อควรระวังคือ คุกกี้เขียนที่เฮดเดอร์ไฟล์ การกำหนดคุกกี้ (setcookie) จะต้อง เขียนก่อนการเกิดเอาท์พุทใดๆ จากการเขียนโค้ด php การเข้ารหัสอักษรที่พิมพ์ ต้องเป็น UTF-8 without BOM <? echo "Hello World !!"; header("content-type: text/html; charset=utf-8"); ?> <? header("content-type: text/html; charset=utf-8"); echo "Hello World !!"; ?>

9 Reading Cookies <?php // read cookie
if (isset($_COOKIE[' '])) { echo 'Welcome back, ' . $_COOKIE[' '] . '!'; } else { echo 'Hello, new user!'; } ?> คุกกี้กำหนดให้ใช้สำหรับโดเมน เพราะตัวแปรพิเศษชื่อ $_COOKIE ที่เก็บเป็นอาร์เรย์ใน คำสั่ง PHP ที่ทำงานอยู่บนโดเมน ดังตัวอย่างการใช้ในสไลด์หน้านี้

10 Removing Cookies <?php // remove cookie
$ret = setcookie('role', 'moderator', time()-1600, '/admin'); if ($ret) { echo 'Cookie headers successfully transmitted.'; } ?> การนำคุกกี้ออก ใช้คำสั่ง setcookie( ) ตามด้วยชื่อ และวันหมดอายุของคุกกี้

11 ทดลองด้วยตนเอง : การใช้ setcookie( )
<?php // if form submitted // write cookie with settings if (isset($_POST['submit'])) { $ret1 = (isset($_POST['name'])) ? setcookie('name', $_POST['name'], mktime() , '/') : null; $ret2 = (isset($_POST['seat'])) ? setcookie('seat', $_POST['seat'], $ret3 = (isset($_POST['meal'])) ? setcookie('meal', $_POST['meal'], $ret4 = (isset($_POST['offers'])) ? setcookie('offers', implode(',', $_POST['offers']), mktime() , '/') : null; //36400 = 10 days (36400 seconds) } // read cookie and assign cookie values // to PHP variables $name = isset($_COOKIE['name']) ? $_COOKIE['name'] : ''; $seat = isset($_COOKIE['seat']) ? $_COOKIE['seat'] : ''; $meal = isset($_COOKIE['meal']) ? $_COOKIE['meal'] : ''; $offers = isset($_COOKIE['offers'])? explode(',',$_COOKIE['offers']): array(); ?> <!DOCTYPE html> <html> <head> <title>Saving and Restoring User Preferences</title> </head> <body> <h2>Saving and Restoring User Preferences</h2> <h3>Set Your Flight Preferences</h3> // if form submitted, display success message Thank you for your submission. // if form not submitted, display form } else { <form method="post" action="setcookies.php"> Name: <br /> <input type="text" size="20" name="name" value="<?php echo $name; ?>" /> <p> Seat selection: <br /> <input type="radio" name="seat" value="aisle" <?php echo ($seat == 'aisle') ? 'checked' : ''; ?>>Aisle</input> <input type="radio" name="seat" value="window" <?php echo ($seat == 'window') ? 'checked' : ''; ?>>Window</input> <input type="radio" name="seat" value="center" <?php echo ($seat == 'center') ? 'checked' : ''; ?>>Center</input> Meal selection: <br /> <input type="radio" name="meal" value="normal-veg" <?php echo ($meal == 'normal-veg') ? 'checked' : ''; ?>>Vegetarian</input> <input type="radio" name="meal" value="normal-nveg" <?php echo ($meal == 'normal-nveg') ? 'checked' : ''; ?>>Non-vegetarian</input> <input type="radio" name="meal" value="diabetic" <?php echo ($meal == 'diabetic') ? 'checked' : ''; ?>>Diabetic</input> <input type="radio" name="meal" value="child" <?php echo ($meal == 'child') ? 'checked' : ''; ?>>Child</input> I'm interested in special offers on flights from: <br /> <input type="checkbox" name="offers[]" value="LHR" <?php echo in_array('LHR', $offers) ? 'checked' : ''; ?>>London (Heathrow)</input> <input type="checkbox" name="offers[]" value="PAR" <?php echo in_array('PAR', $offers) ? 'checked' : ''; ?>>Paris</input> <input type="checkbox" name="offers[]" value="ROM" <?php echo in_array('ROM', $offers) ? 'checked' : ''; ?>>Rome (Ciampino)</input> <br/> <input type="submit" name="submit" value="Submit" /> </form> </body> </html>

12 การดู cookie ใน Google chrome
เครื่องมือ ตั้งค่า แสดงการตั้งค่าขั้นสูง ความเป็นส่วนตัว การตั้ง เนื้อหา คุกกี้และข้อมูลไซต์ทั้งหมด

13 Try: Login form <?php // if form not yet submitted // display form
if (!isset($_POST['submit'])) { $username = (isset($_COOKIE['username'])) ? $_COOKIE['username'] : ''; ?> <!DOCTYPE html> <html> <head></head> <body> <h2>Login Form</h2> <form method="post" action="log_in2.php"> Username: <br /> <input type="text" name="username" value="<?php echo $username; ?>"/> <p> Password: <br /> <input type="password" name="password" value="<?php echo $username; ?>" /> <input type="checkbox" name="sticky" checked /> Remember me <input type="submit" name="submit" value="Log In" /> </form> </body> </html> } else { $username = $_POST['username']; $password = $_POST['password']; // check input if (empty($username)) { die('ERROR: Please enter your username'); } if (empty($password)) { die('ERROR: Please enter your password'); if (isset($_POST['sticky'])) { $ret1 = (isset($_POST['username'])) ? setcookie('username', $_POST['username'],mktime() , '/') : null; $ret2 = (isset($_POST['password'])) ? setcookie('password', $_POST['password'],mktime() , '/') : null; else $ret1 = (isset($_POST['username'])) ? setcookie('username', $_POST['username'],mktime() , '/') : null;

14 Working with Sessions Session Basics
Creating Sessions and Session Variables Removing Sessions and Session Variables

15 Session Basic การใช้คุกกี้บางที่อาจไม่ปลอดภัยพอ เพราะคุกกี้เก็บข้อมูลไว้ ที่เครื่องไคลเอ็นท์ ทั้งหมด ผู้ใช้อาจปรับแต่งคุกกี้ได้เอง เว็บไซต์ที่ต้องการความปลอดภัยสูงจะเก็บข้อมูล Session ไว้ ที่เครื่องเซิร์บเวอร์ แต่ session identifier จะเก็บที่เครื่องไคล เอ็นท์ คล้ายกับคุกกี้ หรือส่งผ่าน URL ใน PHP คุกกี้ของเซสชันจะมีชื่อว่า PHPSESSID

16 Creating Sessions <?php // start session session_start();
// register session variables $_SESSION['name'] = 'Ronald'; $_SESSION['species'] = 'Rabbit'; ?> Note: Session can’t keep object that contain Connection Object(PDO connection)

17 Reading Sessions <?php // start session session_start();
// read session variables // output: 'Welcome back, Ronald Rabbit' echo 'Welcome back, ' . $_SESSION['name'] . ' ' . $_SESSION['species'] ; ?>

18 ข้อระวังในการบันทึกเซสชัน
โดยค่าปริยายแล้ว PHP จะบันทึกข้อมูลเซสชันบนเซิร์บเวอร์ ที่ /tmp ไดเร็กทรอรี่ สำหรับของ Windows ที่ไม่มีไดเร็กทรอรี่ นี้ให้ ให้แก้ที่ไฟล์ php.ini และเปลี่ยน session.save_path กรณีที่เบราเซอร์ไม่อนุญาติให้บันทึก คุกกี้ที่จะทำเซสชัน ให้ แก้โดยการ ส่งเซสชันไอดี (identifier) ผ่าน url แทน ด้วยการ กำหนด session.use_trans_sid ในไฟล์ php.ini เป็น true ทุกเซสชันจะกำหนดเวลาการใช้งานเซสชัน กำหนดได้ผ่าน ไฟล์ php.ini ที่ตัวแปร session.gc_maxlifetime

19 Removing Session การลบตัวแปรเซสชัน ใช้ ฟังก์ชัน unset( ) <?php
session_start(); // start session unset($_SESSION['name']); // erase session variable ?> หรือจะใช้ seesion_destroy( ) เพื่อยกเลิกทุก เซสชัน รวมทั้งตัวแปรเซสชัน session_destroy(); // erase session

20 Test Counter Read File $myfile = fopen("counter.txt", "r") or die("Unable to open file!"); $counter = fread($myfile,filesize("counter.txt")); Write File $myfile = fopen("counter.txt", "w") or die("Unable to open file!"); $txt = $counter; fwrite($myfile, $txt); Close File Fclose($myflle); session_start(); echo "<h2>Hello</h2>"; function readCounter(){ $_SESSION['new_user'] = $_SERVER['REMOTE_ADDR']; $myfile = fopen("counter.txt", "r") or die("Unable to open file!"); $counter = fread($myfile,filesize("counter.txt")); fclose($myfile); if (isset($_SESSION)) { if ($_SESSION['new_user'] != $_SESSION['old_user']){ $counter += 1; $myfile = fopen("counter.txt", "w") or die("Unable to open file!"); $txt = $counter; fwrite($myfile, $txt); } $_SESSION['old_user'] = $_SESSION['new_user']; return $counter; echo "Counter:" . readCounter();

21 Solution session_start(); function readCounter(){
$myfile = fopen("counter.txt", "r") or die("Unable to open file!"); $counter = fread($myfile,filesize("counter.txt")); fclose($myfile); $ip = $_SERVER['REMOTE_ADDR']; if (!isset($_SESSION[$ip])) { $_SESSION[$ip] = $ip; $counter += 1; $myfile = fopen("counter.txt", "w") or die("Unable to open file!"); $txt = $counter; fwrite($myfile, $txt); } return $counter; echo "Counter:" . readCounter();

22 Try: Tracking Previous Visited Page
การอ่านเวลาแต่ละเซสชัน foreach ($_SESSION['visits'] as $v) { echo date('d M Y h:i:s', $v) . '<br/>'; } การเขียน เซสชัน ในรูปอาร์เรย์ใช้ $_SESSION['visits'][] = mktime(); <?php // start session session_start(); ?> <!DOCTYPE > <html> <head> <title>Project 9-2: Tracking Previous Visits To A Page</title> </head> <body> <h2>Project 9-2: Tracking Previous Visits To A Page</h2> if (!isset($_SESSION['visits'])) { echo 'This is your first visit.'; } else { echo 'You previously visited this page on: <br/>'; foreach ($_SESSION['visits'] as $v) { echo date('d M Y h:i:s', $v) . '<br/>'; } </body> </html> // add current date/time stamp to session array $_SESSION['visits'][] = mktime();

23 HTTP Headers

24 Using HTTP Headers การใช้ header ทั่วไป
<?php // redirect to header('Location: ?> ข้อมูลเฮดเดอร์จะต้องส่งก่อน เอาท์พุดใดๆ ของ html เราทดสอบก่อนส่งด้ด้วย headers_sent() <?php if (!headers_sent()) { header('Cache-Control: no-cache'); header('Content-Type: text/plain'); echo 'Headers sent.'; } else { die ('ERROR: Cannot send headers!'); } ในเนื้อหาที่ผ่านมา คุณได้เห็น PHP ส่งข้อมูล คุกกี้ ผ่าน เฮดเดอร์ การส่งข้อมูลผ่านเฮดเดอร์ สามารถส่งได้ผ่านฟังก์ชัน header( ) ในกรณีทั่วไป ใช้เฮดเดอร์ กับ ‘Location:’ เพื่อเชื่อมกับ URL ที่ใหม่ เช่น ใช้ว่า <?php // redirect to header('Location: ?> การส่ง HTTP header จะต้องส่งข้อมูลก่อน เอาท์พุทใด ของ html มิฉะนั้นจะเกิดความผิดพลาดขึ้นได้ เราอาจทดสอบการส่งเฮดเดอร์ก่อนการส่งได้ด้วยคำสั่ง headers_sent() ตามตัวอย่างโค้ดต่อไปนี้ <?php // check if headers sent // if no, send headers // if yes, display error message if (!headers_sent()) { header('Cache-Control: no-cache'); header('Content-Type: text/plain'); echo 'Headers sent.'; } else { die ('ERROR: Cannot send headers!'); }

25 ทดสอบข้อมูล header <?php // control caching
header('Cache-Control: no-cache'); // set content-type header('Content-Type: text/plain'); // print header list print_r(headers_list()); ?>

26 Try: Cookies, Session, Header in Form


ดาวน์โหลด ppt Cookies Sessions Headers

งานนำเสนอที่คล้ายกัน


Ads by Google