Cookie 存取Cookie Cookie有效時間 Session 存取Session session 函數

Slides:



Advertisements
Similar presentations
第六章 网页设计与制作基础.
Advertisements

动态Web开发技术--JSP.
第 4 章 PHP 基本語法.
第五章 JSP内置对象 第4章学习了页面组成元素和使用方法。本章学习JSP内置对象的使用。使用JSP内置对象,可以方便操作页面,访问页面环境,实现页面内、页面间、页面与环境之间的通讯。 学习目标 熟悉主要内置对象的概念 理解主要内置对象的作用域和生命期 理解主要内置对象的作用和关系 熟悉主要内置对象的使用方法.
基于JSP搭建Web应用程序.
第5章 HTML 標籤介紹.
第8讲 HTML与PHP基础 静态网页 vs. 动态网页.
网页制作 第一讲
HTML概念 HTML(Hyper Text Markup Language 超文本标识语言) 是一种用来制作超文本文档的简单标记语言。
第三讲 站点链接与表格布局.
Web图片搜索引擎设计 ——基于文本的图片信息提取.
网页 设计与制作.
第8章 CSS基础知识 【学习目标】 对于一个网页设计者来说,对HTML语言一定不感到陌生,因为它是网页制作的基础,但是如果希望网页能够美观、大方,并且升级维护方便,那么仅仅知道HTML还是不够的,还需要了解CSS。了解CSS基础知识,可以为后面的学习打下基础。 本章主要内容包括: 为什么在网页中加入CSS。
2 HTML5與CSS3 2-1 HTML5的頁面結構 2-2 HTML5的文字編排標籤 2-3 HTML5的圖片與超連結標籤
第五单元课1-3 层叠样式表.
模块1 网页设计基础 实训1 体验HTML文档 1.1 网页基础知识 1.2 网站配色方案 1.3 网站设计常用软件
使用HTML製作個人網頁 柴惠敏 台灣大學 物理治療學系.
第六章 操作浏览器窗口.
HTML.
Ch07 PHP程式基礎 網頁程式設計.
ASP动态网页设计实用教程 主讲教师: 开课单位:.
第3章 超文本标记语言(HTML) 3.1 基本结构标记 3.2 文本格式标记 3.3 超链接标记<A></A>
建國技術學院資訊管理學系 饒瑞佶 2004/7/5 彰化縣政府補助辦理網頁設計資料庫應用班 建國技術學院資訊管理學系 饒瑞佶 2004/7/5.
PHP+MySQL互動式網頁程式設計班 PHP進階語法 講師:林業峻 CSIE, NTU 6/ 19, 2010.
PHP程式設計 二、HTML & PHP基本語法 建國科技大學 資訊管理學系 饒瑞佶.
Hello World 體驗實作第一個JSP程式.
教師: 陳明瑤 電郵: 網際網路應用-網頁設計3 教師: 陳明瑤 電郵:
第 2 章 必備的 HTML 與 CSS 重點.
第四章 網頁表單與資料傳遞.
留言版 1.先Create一個留言板的table
PHP +MySQL快速入門 Lesson 4.
XSS & SQL Injection理論 2014/7/29 許子謙.
PHP 5 入門基礎 第一個PHP 程式 PHP 資料型態.
利用PHP將資料存入MySQL PHP 5 Tutorial 範例:
網路概念 APACHE PHP MYSQL HTML BY 董仔 08/01/14.
Ch.13 HTML網頁實作.
第2章 超文本标记语言HTML.
電子商務網站建制技術與實習(II) 助教:江宜政 吳昇洋.
JavaScript 语言3 学习网站:心蕊设计
進階 WWW 程式設計 -- PHP Regular Expression 靜宜大學資訊管理學系 蔡奇偉副教授 2004
PHP5與MySQL5 入門學習指南 凱文瑞克 著 第 18 章 Cookie和 Session.
無障礙網頁 公關室.
檔案上傳 所謂檔案上傳,就是將檔案由客戶端的主機,藉 由瀏覽器傳送到伺服器的資料夾上。
W3C标准网页制作 主讲教师:张 涛.
條件判斷指令 -if 指令 -switch 指令 迴圈指令 - for 迴圈 - while迴圈 - break、continue 指令
PHP 程式流程控制結構.
第3 章 VBScript的控制结构.
張智星 台大資工系 多媒體檢索實驗室 第九章 小餅乾(Cookies) 張智星 台大資工系 多媒體檢索實驗室.
HTML & CSS.
网 站 设 计 与 建 设 Website design and developments
Cookie 存取Cookie Cookie有效時間 Session 存取Session session 函數
PHP 變數、常數與運算子 變數 常數 運算子
网站设计 前端 选择器(复习),表单.
PHP5與MySQL4 入門學習指南 凱文瑞克 著 第 16 章 檔案處理.
架站實做—AppServ
网页设计与制作教程第5版 机械工业出版社同名教材 配套电子教案.
HTML 103 互動式網頁.
Open方法和close方法 主讲人:傅伟玉.
Ajax编程技术 第六章 调试与错误处理.
Ch09 在網頁之間傳遞資訊 網頁程式設計.
HTTP 1.1 Method OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT
HTML 103 互動式網頁 助教:黃毓瑩.
利用PHP將資料存入MySQL PHP 5 Tutorial 範例:
第6章 PHP的数据采集.
Unity回傳統計資訊程式說明: 填寫回傳資訊網址(theUrl)。
PHP程式設計 五、程式流程控制結構 建國科技大學 資訊管理學系 饒瑞佶.
網頁設計實務- PHP 與資料庫整合.
第6章 PHP基本語法介紹.
PHP5與MySQL5 入門學習指南 凱文瑞克 著 第 12 章 迴圈指令.
表单页面 表单是用户利用浏览器对Web站点网络数据库进行查询的一种界面,用户利用表单可以输入信息或选择选项等,然后将这些信息提交给服务器进行处理。通过表单,既可以将浏览器的信息发送到Internet服务器上,同时表单也可以使用户与站点的浏览者交互或从浏览者那里收集信息。它是网页的设计者和使用者相互交流的工具。表单对象包括文本域(单行、多行、密码)、列表、菜单、复选框、单选框、按钮等。
Presentation transcript:

Cookie 存取Cookie Cookie有效時間 Session 存取Session session 函數

關於 Cookie 與 Session 使用者在瀏覽網頁時並不是一直與伺服器保持 在連線的狀態下,事實上當瀏覽者送出需求到 伺服器端處理後將結果回傳顯示,就已經結束 與伺服器的連線。 當需要新資料或是更新顯示內容時,都必須重 新載入頁面或是重新送出需求。 HTTP 之無狀態(Stateless)特性

為什麼要使用 Cookie 與 Session? 例如:會員系統 當會員以帳號密碼登入系統後,程式有兩個方式來記 住登入會員的資料: 在登入者的電腦中放入一個小檔案來記憶  Cookie 在伺服器的記憶體產生一個空間來記憶  Session

Cookie 簡介 Cookie 是將少量的資料儲存在遠端的個人電腦 中的技術。

IE Cookie 設定

Firefox Cookie 設定

存取Cookie 存入Cookie可利用setcookie()函數 注意事項: setcookie() 必須在任何輸出(echo, print)及 <html><head>之前,否則Cookie 的設定都 會失敗。 Cookie內容設定必須等到下次讀取網頁 時才會看到內容的改變。

存取Cookie setcookie() 函數 功能: 設定一個 cookie 於遠端電腦中 格式: boolean setcookie ( 變數名稱 [, 存入值 [, 有效時間 [, 路徑 [, 領域 [, 安全性]]]]]) 變數名稱: 設定 Cookie 的名稱。 存入值: 設定存入變數的值。 有效時間: 設定Cookie 變數的生命週期。 路徑: 存放 Cookie 的路徑。 領域: 說明 Cookie 的領域。 安全性設定: 1 : 必須藉由 https 安全連線才可存入 Cookie。 否則設定為 0。

設定Cookie 範例 setcookie ("A", "10"); setcookie ("B", "20", time()+3600); 設定名稱為A的 Cookie, 其內容為 10。 setcookie ("B", "20", time()+3600); 設定名稱為 B, 其值為 20, 有效時間為一個小時。 setcookie ("C", "Hello", time()+7200, "./test/", ".abc.def.tw", 1); 設定有效時間二小時名稱為 C 的 Cookie, 存放於路 徑 ./test/下, 領域為 .abc.def.tw,並必須使用安全連 線。

取出cookie 利用全域變數$_COOKIE陣列取出 cookie,取得儲存於遠端電腦中的 Cookie. Ex. $lang = $_COOKIE['language'];

Cookie 範例 存取Cookie 範例 1: <?php 2: setcookie("A","10"); 3: setcookie("B","Hello, I am B."); 4: echo "我已設定 Cookie "; 5: ?> 1: <?php 2: echo "A = ". $_COOKIE['A'] . "<p>"; 3: echo "B = ". $_COOKIE['B'] . "<p>"; 4: echo "取出 Cookie"; 5: ?>

http://ycchen.im.ncnu.edu.tw/www2011/lab/php/cookie.zip <?php if (!isset($_COOKIE["cnt"])) { setcookie("cnt", "1"); $msg = "Welcome to Visit us!"; } else { $cnt = $_COOKIE["cnt"]; $cnt++; setcookie("cnt", $cnt); $msg = "This is your {$cnt}-th visit!"; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Cookie, Visit count</title> </head> <body> <div id="content"> echo $msg; </div> </body> </html>

Cookie有效時間 預設Cookie 有效時間為關閉瀏覽器時即失效 設定有效時間兩種方法: time()+秒數 例如: time()+3600 有效時間為設定 Cookie 後 1 個小時 (60x60=3600) mktime() 某個指定日期前都有效。 格式: int mktime(時, 分, 秒, 月, 日, 年)

Cookie有效時間 setcookie ("A", "10", time()+3600); setcookie ("B", "20", time()+86400); Cookie B 的有效時間為 1 天。 setcookie ("C", "30", mktime(0,0,0,6,20,2014)); Cookie C 的有效時間為 2014 年 6 月 20 日前。 setcookie ("D", "50", mktime(0,0,0,12,31,2020)); Cookie D 的有效時間為 2020 年 12 月 31 日前。

Cookie有效時間 Cookie 有效時間範例: <?php $nowcnt=$_COOKIE['cnt']; $nowcnt++; setcookie("cnt", $nowcnt, time()+3600); echo "您是第 $nowcnt 次光臨本站"; ?> 示範步驟: 先同一個Browser 重複整理 關掉 browser 再開啟 換不同 的browser

刪除cookie 改變 Cookie 的有效時間使 Cookie 過期立即 失效,即可刪除 Cookie。 例: <?php $nowcnt=$_COOKIE['cnt']; $nowcnt++; setcookie("cnt", $nowcnt,time()+3600); if ($nowcnt>=5) setcookie("cnt", $nowcnt,time()-3600); echo "您是第 $nowcnt 次光臨本站"; ?> 18-4.php

Session Cookie URL 傳遞 Session 將資料寫在伺服器端,資料的安全性比較高, 但較佔資源。 為了辨識不同的 Session,每個Session 都會有一個唯一 的編號稱為 Session id。 Session id 的產生方式有兩種, 分別是 Cookie URL 傳遞 補充: 伺服器安全性可能會降低

啟動Session 啟動 session 功能的方式有兩種: php.ini參數設定 參數 session.auto_start ,將此參數改為 1。 使用session_start() 函數 較為常用的方式 啟動 session 後,伺服器會利用本次連線之 session id 前面加上 "sess_" ,組合成一個檔案名稱,用來存放 session 資料。

存取Session 存取session 有兩種方式: 利用全域變數設定: (不建議) 將php.ini 中的 register_globals 設定為enable 建議使用 $_SESSION['變數名稱'] 儲存的session 會放置於「php.ini」檔案中 session.save_path 所指定的目錄下找到。

Session 範例 1: <?php 2: session_start(); 3: // session_register("A"); 舊版php 4: // session_register("B"); 舊版php 5: $_SESSION['A']=10; 6: $_SESSION['B']="Hello My "; 7: ?> 8: <html> 9: <title>Session測試</title> 10: <body> 11: <?php 12: echo "Session ID = " . session_id() . "<p>"; 13: echo "運算前 <br>"; 14: echo "A = " . $_SESSION['A'] . "<br>"; 15: echo "B = " . $_SESSION['B'] . "<p>"; 16: $_SESSION['A']++; 17: $_SESSION['B'] .= "Friend."; 18: echo "運算後 <br>"; 19: echo "A = " . $_SESSION['A'] . "<br>"; 20: echo "B = " . $_SESSION['B']; 21: ?> 22: </body> 23: </html>

Session id 傳遞 理論上,每個連線(瀏覽器)都有不同的session id, 因此瀏覽器之間無法共同使用session 變數。 而若必須讓二個瀏覽器間共用session 變數,那麼 使用相同的session id 就可以了  可利用 URL 傳遞  有安全疑慮 Session Hijacking

Session id 傳遞範例 <?php session_start(); if (isset($_SESSION['A'] )) else $_SESSION['A']=1; echo "Session id = ".session_id()."<p>"; echo "變數值 = ".$_SESSION['A']."<p>"; echo "<a href=\"./18-6.php\" traget=\"newwin\">開新視窗</a>"; ?>

取消註冊session 變數* <?php function show(){ echo "session_id = ".session_id()."<br>"; echo "A = ".$_SESSION['A']."<br>"; echo "B = ".$_SESSION['B']."<br>"; echo "C = ".$_SESSION['C']."<p>"; } session_start(); $_SESSION['A']=10; $_SESSION['B']=20; $_SESSION['C']=30; show(); unset($_SESSION['A']); session_unset(); session_destroy(); ?>

addCart.php addCart.php?pid=003 showCart.php

product.php <?php $product["001"]= array("Sony 16G隨身碟", 1200); $product["002"]= array("Asus 802.11g基地台", 3100); $product["003"]= array("Acer 150G外接式硬碟", 2780); $product["004"]= array("Logitech 無線光學滑鼠", 1340); ?> addCart.php (1/2) <?php include "product.php"; session_start() ; $sel=""; if (isset($_GET["pid"])) { $sel = $_GET["pid"]; if (isset($_SESSION["cart"][$sel])) $_SESSION["cart"][$sel]++; else $_SESSION["cart"][$sel]=1; } ?> <html> … 例: $sel = "003" (addCart.php?pid=003) $_SESSION["cart"]["003"]++; $_SESSION["cart"]["003"] = 1; http://ycchen.im.ncnu.edu.tw/www2011/lab/php/session.zip

addCart.php (2/2) <div id="content"> <h2>商品一覽表</h2> <table border="2" cellpadding="5"> <tr><th>商品名稱</th><th>價格</th><th>購物</th></tr> <?php foreach ($product as $pid => $pInfo) if ($pid == $sel) echo "<tr id=\"sel\"><td>{$pInfo[0]}</td><td>NT\${$pInfo[1]}</td><td> <a href=\"addCart.php?pid=$pid\">放入購物車</a></td></tr>\n"; else echo "<tr><td>{$pInfo[0]}</td><td>NT\${$pInfo[1]}</td><td> ?> </table> <h3><a href="showCart.php">購物車內容</a></h3> </div> #sel td {background-color: darkGreen; color: ivory}

showCart.php <?php include "product.php"; session_start() ; ?> … <div id="content"> <h2>購物車內容</h2> <table border="2" cellpadding="5"> <tr><th>商品名稱</th><th>價格</th><th>數量</th></tr> if (isset($_SESSION["cart"])) { foreach ($_SESSION["cart"] as $pid => $cnt) echo "<tr><th>{$product[$pid][0]}</th><th>NT\${$product[$pid][1]}</th> <th>$cnt</th></tr>\n"; } </table> <h3><a href="addCart.php">繼續購物</a></h3> </div>

表單登入 login.php <?php if (!(isset($_POST['name']) || isset($_POST['passwd']))) include "login_inc.php"; elseif (($_POST['name'] != "admin") || ($_POST['passwd'] != "pwd999")) else { echo "登入成功 .....<br/>"; echo "您登入的帳號是 ".$_POST['name']."<br/>"; echo "<a href=\"admin.php\">進入系統管理畫面</a>"; // not complete, 待續 } ?> login_inc.php <h3>未輸入帳號或密碼, 或帳號,密碼不正確 </h3> <form action="login.php" method=post> 帳號 <input type=text name=name value="請輸入帳號" size=10><br/> 密碼 <input type=password name=passwd size=10><br/> <input type=submit value=" 登入 "> <input type=reset value=" 清除 "> </form>

使用session檢查是否已登入 login1.php <?php session_start(); ?> … <?php if (!(isset($_POST['name']) || isset($_POST['passwd']))) include "login1_inc.php"; elseif (($_POST['name'] != "admin") || ($_POST['passwd'] != "pwd999")) else { $_SESSION['isAdmin']=true; echo "登入成功 .....<br/>"; echo "您登入的帳號是 ".$_POST['name']."<br/>"; echo "<a href=\"admin1.php\">進入系統管理畫面</a>"; } ?>

admin1.php <?php session_start(); if (!$_SESSION['isAdmin']) { header("Location: login1.php"); exit; } ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> … <body> <div id="content"> <h3>~系統管理~</h3> <ul> <li><a href="…">使用者帳戶管理</a></li> <li> ><a href="…">變更密碼</a></li> <li> ><a href="…">首頁管理</a></li> </ul> </div> </body> </html>

session 函數 函數名稱 函數說明 int session_cache_expire() 傳回 PHP.INI 中 session.cache_expire 的值 string session_cache_limiter([string cache_limiter]) 取得或設定目前 cache limiter 的名稱 bool session_decode(string data) 將 session 的資料解碼 bool session_destroy(void) 取消所有 session 中註冊的資料 string session_encode(void) 將 session 的資料編碼 array session_get_cookie_params() 取得 session cookie 的資訊 string session_id([string id]) 設定或取回 session id bool session_is_registered(string name) 檢查變數是否已經在 session 中註冊。 變數已經註冊傳回 True否則傳回 False。 String session_module_name([string module]) 取回或設定 session 模組 String session_name(string name) 取回或設定 session 的名稱

session 函數 void session_readonly(void) 可讀取 session 資料, 但是不可以更改內容 string session_save_path(string path) 取得或設定儲存 session 的路徑 void session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure]]]) 設定 php.ini 中 session cookie 參數 bool session_set_save_handler ( string open, string close, string read, string write, string destroy, string gc) 設定使用者定義 session 儲存功能 bool session_start (void) 啟動 session void session_unset(void) 釋放所有 session 變數 void session_write_close(void) 寫入 session 資料及結束session