25
PHP 介介 (3)

PHP 介紹 (3)

  • Upload
    nelson

  • View
    71

  • Download
    2

Embed Size (px)

DESCRIPTION

PHP 介紹 (3). 上課大綱. Session & Cookie 接收客戶端表單資料 連結 MySQL 資料庫. Session & Cookie. Session & Cookie (1/8). 在互動式網頁中, Session 及 Cookie 提供了「記憶」有關使用者資訊的能力,例如當我們到某一些網站的時候,網頁會呈現您「第n次光臨」或是在網路書店選書,但還沒確定下單時,過程中選的書如何被「記憶」下來呢?在一般的互動性網頁大都運用了所謂的 Session 或 Cookie 的功能來處理這些工作。 - PowerPoint PPT Presentation

Citation preview

Page 1: PHP 介紹  (3)

PHP 介紹 (3)

Page 2: PHP 介紹  (3)

上課大綱 Session & Cookie 接收客戶端表單資料 連結 MySQL 資料庫

Page 3: PHP 介紹  (3)

Session & Cookie

Page 4: PHP 介紹  (3)

Session & Cookie (1/8)

在互動式網頁中, Session 及 Cookie 提供了「記憶」有關使用者資訊的能力,例如當我們到某一些網站的時候,網頁會呈現您「第n次光臨」或是在網路書店選書,但還沒確定下單時,過程中選的書如何被「記憶」下來呢?在一般的互動性網頁大都運用了所謂的 Session 或 Cookie 的功能來處理這些工作。

即然是「記憶」使用者的資訊,除了用「記憶體」之外 ( 但一般不致於用它,畢竟容量比較小 ) ,主要的就是利用「檔案」來儲存資訊,所以 Session 或 Cookie 其實都是一個「小」檔案,但這個檔案儲存的位置不同,「安全性」也不同。

Page 5: PHP 介紹  (3)

Session & Cookie (2/8)

Session 是將使用者資訊儲存在 Server 端暫存檔中,儲存的位置是依照 php.ini 的設定:session.save_path = /tmp

而 Cookie 是儲存在使用者自己的電腦裡 (Client 端 ) ,儲存的位置一般是放在: C:\Documents and Settings\ 電腦帳號 \Cookies

Page 6: PHP 介紹  (3)

Session & Cookie (3/8)

Session 的檔案名稱類似 : sess_3dd484f2bab6a2d2509e9850dae3b897 sess_ 開頭,加上 32 字元的亂數雜湊編碼所組成的檔名

Session 檔案內容: check|s:3:"yes";var1|s:1:"4";var2|s:1:"5"; 變數名稱|變數類型:長度:內容;

Page 7: PHP 介紹  (3)

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 有效日期、修改日期、建立日期、建立者

Page 8: PHP 介紹  (3)

Session & Cookie (5/8)

Cookie 的一些限制:因為 Cookie 常常用來存取使用者的資訊,為了怕被拿來濫用,或是佔用太多硬碟空間,所以對 Cookie 做出了以下的限制:

每個使用者的瀏覽器只能支援 ( 存取 )300 個 Cookie 每個瀏覽器只能針對同一個伺服器存取 20 個 Cookie 每個 Cookie 的大小最多僅 4k Bytes 的容量 有些瀏覽器可以把 Cookie 的功能關掉,若關掉後 Cookie 就不能使用

Page 9: PHP 介紹  (3)

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?>

Page 10: PHP 介紹  (3)

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>";?>

Page 11: PHP 介紹  (3)

Session & Cookie (8/8)

使用 session 及 cookie 的注意事項: 在使用 setcookie( ) 、 session_start( ) 函數時,之前都不可以有任

何的結果輸出,例如不可以在 setcookie( ) 之前使用 echo 輸出變數或將 setcookie ( ) 嵌入在網頁中,其他 html 語法先輸出,否則會出現錯誤訊息。

如果沒有設定留存時間,雖然有指定 cookie 名稱及數值,但因為一設定就過期,結果是無法讀取您寫入的 Cookie 。

如果要刪除 cookie 的話,直接把要刪除 cookie 名稱的值設定為空白即可。

Page 12: PHP 介紹  (3)

接收客戶端表單資料

Page 13: PHP 介紹  (3)

客戶端傳遞資料給伺服端的方法 瀏覽器可以使用 2種方法來傳遞資料給伺服主機GET (透過 url 傳送資料 )POST (隱藏在 HTTP Header 中 )

Page 14: PHP 介紹  (3)

透過 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>";?>

Page 15: PHP 介紹  (3)

表單的 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>

Page 16: PHP 介紹  (3)
Page 17: PHP 介紹  (3)

使用 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>";?>

Page 18: PHP 介紹  (3)
Page 19: PHP 介紹  (3)

連結 MySQL 資料庫

Page 20: PHP 介紹  (3)

常用 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);

Page 21: PHP 介紹  (3)

建立測試用的資料庫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';

Page 22: PHP 介紹  (3)

連線到 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);?>

Page 23: PHP 介紹  (3)

執行結果

Page 24: PHP 介紹  (3)

建立留言畫面// 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>

Page 25: PHP 介紹  (3)

儲存留言// 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>"

?>