250 likes | 454 Views
PHP 介紹 (3). 上課大綱. Session & Cookie 接收客戶端表單資料 連結 MySQL 資料庫. Session & Cookie. Session & Cookie (1/8). 在互動式網頁中, Session 及 Cookie 提供了「記憶」有關使用者資訊的能力,例如當我們到某一些網站的時候,網頁會呈現您「第n次光臨」或是在網路書店選書,但還沒確定下單時,過程中選的書如何被「記憶」下來呢?在一般的互動性網頁大都運用了所謂的 Session 或 Cookie 的功能來處理這些工作。
E N D
上課大綱 • Session & Cookie • 接收客戶端表單資料 • 連結MySQL資料庫
Session & Cookie (1/8) • 在互動式網頁中,Session及Cookie提供了「記憶」有關使用者資訊的能力,例如當我們到某一些網站的時候,網頁會呈現您「第n次光臨」或是在網路書店選書,但還沒確定下單時,過程中選的書如何被「記憶」下來呢?在一般的互動性網頁大都運用了所謂的Session或Cookie的功能來處理這些工作。 • 即然是「記憶」使用者的資訊,除了用「記憶體」之外(但一般不致於用它,畢竟容量比較小),主要的就是利用「檔案」來儲存資訊,所以Session或Cookie其實都是一個「小」檔案,但這個檔案儲存的位置不同,「安全性」也不同。
Session & Cookie (2/8) • Session是將使用者資訊儲存在Server 端暫存檔中,儲存的位置是依照 php.ini 的設定: • session.save_path = /tmp • 而Cookie是儲存在使用者自己的電腦裡(Client端),儲存的位置一般是放在: • C:\Documents and Settings\電腦帳號\Cookies
Session & Cookie (3/8) • Session 的檔案名稱類似 : • sess_3dd484f2bab6a2d2509e9850dae3b897 • sess_ 開頭,加上 32字元的亂數雜湊編碼所組成的檔名 • Session檔案內容: • check|s:3:"yes";var1|s:1:"4";var2|s:1:"5"; • 變數名稱|變數類型:長度:內容;
Session & Cookie (4/8) • Cookie 的檔案名稱類似 : • tai2@yahoo[2].txt • 主機使用者帳號@網址.txt • Cookie檔案內容: B cookie 名稱 b4lus0l2qbos3&b=3&s=71 cookie 值 yahoo.com/ cookie 網域及路徑 1024 342532096 32065574 4054363008 29832527 安全性、cookie有效日期、修改日期、建立日期、建立者
Session & Cookie (5/8) • Cookie 的一些限制:因為Cookie常常用來存取使用者的資訊,為了怕被拿來濫用,或是佔用太多硬碟空間,所以對Cookie做出了以下的限制: • 每個使用者的瀏覽器只能支援(存取)300個Cookie • 每個瀏覽器只能針對同一個伺服器存取20個Cookie • 每個Cookie的大小最多僅4k Bytes的容量 • 有些瀏覽器可以把Cookie的功能關掉,若關掉後Cookie就不能使用
Session & Cookie (6/8) • Session 範例: // s1.php <?php session_start(); // 啟動session $_SESSION[‘name’] = “dai”;// 建立session變數name值是dai $_SESSION['birthday'] = "11/15"; echo “Session Info -> ”.SID.“<br>”; // SID是session_start()時自動建立的常數 echo "<a href='s2.php?".SID."'>View</a>“; ?> // s2.php <?php session_start(); echo "name = ". $_SESSION['name'] ."<br>"; echo "birthday = ". $_SESSION['birthday'] ."<br>"; session_destroy(); //結束session ?>
Session & Cookie (7/8) • Cookie 範例: setcookie("Cookie變數名稱","Cookie數值","期限","路徑","網域","安全") // c1.php <?php // 設定cookie名稱是name值是dai有效期限是1800秒後 setcookie (“name”, “dai”, time()+1800); setcookie (“birthday”, “11/15”, time()+1800); echo "<a href=‘c2.php’>View</a>“; ?> // c2.php <?php echo "name = ". $_COOKIE["name"] ."<br>"; echo "birthday = ". $_COOKIE["birthday"] ."<br>"; ?>
Session & Cookie (8/8) • 使用session及cookie的注意事項: • 在使用setcookie( )、 session_start( )函數時,之前都不可以有任何的結果輸出,例如不可以在setcookie( )之前使用echo 輸出變數或將setcookie ( )嵌入在網頁中,其他html語法先輸出,否則會出現錯誤訊息。 • 如果沒有設定留存時間,雖然有指定cookie名稱及數值,但因為一設定就過期,結果是無法讀取您寫入的 Cookie。 • 如果要刪除cookie的話,直接把要刪除cookie名稱的值設定為空白即可。
客戶端傳遞資料給伺服端的方法 • 瀏覽器可以使用2種方法來傳遞資料給伺服主機 • GET (透過url傳送資料) • POST (隱藏在HTTP Header中)
透過URL使用GET方法 • Server端接收GET資料傳遞的範例 • 請在瀏覽器上輸入下面的url • http:// server ip /g.php?name=dai&birthday=1115 // g.php <?php echo "name = ". $_GET["name"] ."<br>"; echo "birthday = ". $_GET["birthday"] ."<br>"; ?>
表單的GET方法 • 請建立下面的表單 <!– g.htm --> <html> <body> <form method="GET" action="g.php"> <input type="text" name="name"> <input type="text" name="birthday"> <input type="submit" value="Send"> </form> </bdoy> </html>
使用POST傳遞資料 • 請建立下面的表單 <!- p.htm --> <html> <body> <form method=“POST" action=“p.php"> <input type="text" name="name"> <input type="text" name="birthday"> <input type="submit" value="Send"> </form> </bdoy> </html> // p.php <?php echo "name = ". $_POST["name"] ."<br>"; echo "birthday = ". $_POST["birthday"] ."<br>"; ?>
常用MySQL操作函數 • 建立連線,並回傳連線物件 $link = mysql_connect("Mysql主機名稱", "帳號", "密碼"); • 選取要操作的資料庫 mysql_select_db(“資料庫名稱“,$link); • 執行SQL命令,並傳回結果集 $result = mysql_query($query,$link); • 取得總資料筆數 mysql_num_rows($result); • 從結果集中取出下一筆資料 mysql_fetch_row($result); • 釋放結果集佔用的記憶體空間 mysql_free_result($result); • 結束連線 mysql_close($link);
建立測試用的資料庫 create database msg; create table msg( name char(30), dtime char(30), msg text); insert into msg values('dai',’2007-02-08 08:08:08','hello mysql'); insert into msg values(‘qq',’2007-02-08 06:06:06','hello mysql2'); grant all privileges on msg.* to dai@localhost identified by ‘1115';
連線到MySQL // msg_ls.php <?php $link = mysql_connect("localhost","dai","1115"); mysql_select_db("msg",$link); $result = mysql_query("select * from msg",$link); $num = mysql_num_rows($result); echo "num = $num <br>"; for($i=0;$i<$num;$i++) { $row=mysql_fetch_row($result); echo "<hr>"; echo "name = ".$row[0]."<br>"; echo "dtime = ".$row[1]."<br>"; echo "msg = ".$row[2]."<br>"; } mysql_free_result($result); mysql_close($link); ?>
建立留言畫面 // msg_write.htm <form method=“POST” action=“msg_save.php”> Name: <br> <input type=“text” name=“name”><br> Message: <br> <textarea name=“msg”></textarea> <br> <input type="submit" value="Send"> </form>
儲存留言 // msg_save.php <?php $name = $_POST['name']; $msg = $_POST['msg']; $dtime = date("Y-m-d H:i:s"); $query = "insert into msg value('$name','$dtime','msg')"; $link = mysql_connect("localhost","dai","1115"); mysql_select_db("msg",$link); $result = mysql_query($query,$link); mysql_close($link); echo "<a href='msg_ls.php'>View</a>" ?>