PHP使用者指南-cookies部分

來源:互聯網
上載者:User
關鍵字 PHP使用者指南-cookies部分
php使用者指南-cookies部分

在這課教程我們將學習怎樣利用 PHP 處理cookies,我將試著使事情儘可能簡單地去解釋cookies的一些實際應用。

什麼是cookies及作用? 
cookies是由web伺服器產生的並且存在用戶端的一些資訊。它嵌在html資訊中,由伺服器端指定,在用戶端及伺服器端間傳遞資訊
。它通常用來:使用者網頁個人化,計數器,儲存被瀏覽網站的資訊等。

cookies和php
在 PHP中用cookies是相當容易的。可以使用setcookie函數設定一個cookie。cookie是 HTTP標題的一部分, 因此設定cookie功能必須在任何內容送到瀏覽器之前。這種限制與header()函數一樣。任何從用戶端傳來的cookie將自動地轉化成一個PHP變數。PHP取得資訊頭並分析, 提取cookie名並變成變數。因此,如果你設定cookie如setcookie("mycookie","wang");php將自動產生一個名為$mycookie,值為"wang"的變數.

先讓我們複習一下setcookie函數文法:
setcookie(string CookieName, string CookieValue, int CookieExpireTime, path, domain, int secure);
PATH:表示web伺服器上的目錄,預設為被調用頁面所在目錄
DOMAIN:cookie可以使用的網域名稱,預設為被調用頁面的網域名稱。這個網域名稱必須包含兩個".",所以如果你指定你的頂級網域名稱,你必須用".mydomain.com"
SECURE:如果設為"1",表示cookie只能被使用者的瀏覽器認為是安全的伺服器所記住

應用:
對於一個需要註冊的網站,將自動識別使用者的身份,並發送給它資訊,如果是陌生人,將告訴他請先註冊。我們按下面給出的資訊建立一個小型數 據庫:名字(first name),姓(last name),email地址(email address),計數器(visit counter).
按下面步驟建表:

MySQL> create database users; 
Query OK, 1 row affected (0.06 sec) 

mysql> use users; 
Database changed 

mysql> create table info (FirstName varchar(20), LastName varchar(40), 
email varchar(40), count varchar(3)); 
Query OK, 0 rows affected (0.05 sec)
 
好,現在有了符合要求的表,我們可以建一個php頁面對照資料庫檢查cookies.

########################index.php##################################
$info = explode("&", $Example); 
$FirstName=$info[0]; 
$LastName=$info[1]; 
$email=$info[2]; 
$count=$info[3]; 
$count++; 

$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count; 
SetCookie ("Example",$CookieString, time()+3600); //設一新的cookie 

echo"  
wang example 
 
 

Hello $FirstName $LastName, this is your visit number: $count

 

Your email address is: $email

 
 
"; 

mysql_connect() or die ("PRoblem connecting to DataBase"); //update DB 
$query = "update info set count=$count where FirstName='$FirstName' and 
LastName='$LastName' and email='$email'"; 
$result = mysql_db_query("users", $query) or die ("Problems .... "); 

} //End Existing cookie instructions 

else { //Begin inctructions for no Cookie 
echo " 
 
Rafi's Cookie example 
 
 
Click Here for Site Registration 
 
"; 
} //End No Cookie instructions 
?>

注意:如果你用的是一個遠程mysql伺服器或unix伺服器,你應用下面語句
mysql_connect ("server","username","passWord") or die ("Problem connecting to DataBase"); 

我們想檢查是否一個被指定名字的cookie在html頭部分傳送,記住,php能轉換可識別的cookie為相應的變數,所以我們能檢查一個名為"Example" 的變數:
... 
} else { 
... 
}
如果這個cookie存在,我們將計數器加一,並列印使用者資訊,如果這個cookie不存在,我們建議使用者先註冊
如果cookie存在,我們執行下面步驟:
$info = explode("&", $Example); //split the string to variables 
$FirstName=$info[0]; 
$LastName=$info[1]; 
$email=$info[2]; 
$count=$info[3]; 
$count++; 

$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count; 
SetCookie ("Example",$CookieString, time()+3600); //setting a new cookie 

echo"  
wang example 
 
 

Hello $FirstName $LastName, this is your visit number: $count

 

Your email address is: $email

 
 
"; 

mysql_connect() or die ("Problem connecting to DataBase"); //update DB 
$query = "update info set count=$count where FirstName='$FirstName' and 
LastName='$LastName' and email='$email'"; 
$result = mysql_db_query("users", $query) or die ("Problems .... "); 

} //End Existing cookie instructions
上面的程式有3個主要部分:首先取得cookie值,用explode函數分成不同的變數,增加計數器,並設一新cookie.接著用html語句輸出使用者資訊。最後,用新的計數器值更新資料庫。
如果這個cookie不存,下面的程式將被執行:
 
else { //Begin inctructions for no Cookie 
echo " 
 
Rafi's Cookie example 
 
 
Click Here for Site Registration 
 
"; 
} //End No Cookie instructions 

下面reg.php簡單列出到註冊頁面的連結
#############################reg.php#############################
 
 
 
Registering the Site 
 

 

Registering the site

 

 
 
 


在所有的資訊被提交後調用另一php檔案分析這些資訊
##############################reg1.php####################################
if ($FirstName and $LastName and $email) 
{ 
mysql_connect() or die ("Problem connecting to DataBase"); 
$query="select * from info where FirstName='$FirstName' and 
LastName='$LastName' and email='$email'"; 
$result = mysql_db_query("users", $query); 

$r=mysql_fetch_array($result); 
$count=$r["count"]; 

if (isset($count)) { 
$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count; 
SetCookie ("Example",$CookieString, time()+3600); 
echo "

user $FirstName $LastName already exists. Using the existing 
info.

"; 
echo "

Back to Main Page"; 
} else { 
$count = '1'; 
$query = "insert into info values 
('$FirstName','$LastName','$email','$count')"; 
$result = mysql_db_query("users", $query); 
$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count; 
SetCookie ("Example",$CookieString, time()+3600); 
echo "Thank you for registering.
"; 
} 

} else { echo "Sorry, some information is missing. Please go back and add all 
the information"; } 
?> 
首先檢查所有的資訊是否按要求填寫,如果沒有,返回重新輸入
if ($FirstName and $LastName and $email) 
{ 
... 
} else { echo "Sorry, some information is missing. Please go back and add all 
the information"; } 
?>
如果所有資訊填好,將執行下面:
 
mysql_connect() or die ("Problem connecting to DataBase"); 
$query="select * from info where FirstName='$FirstName' and 
LastName='$LastName' and email='$email'"; 
$result = mysql_db_query("users", $query); 

$r=mysql_fetch_array($result); 
$count=$r["count"]; 

if (isset($count)) { 
$count++; 
$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count; 
SetCookie ("Example",$CookieString, time()+3600); 
echo "

user $FirstName $LastName already exists. Using the existing 
info.

"; 
echo "

Back to Main Page"; 
} else { 
$count = '1'; //new visitor - set counter to 1. 
$query = "insert into info values 
('$FirstName','$LastName','$email','$count')"; 
$result = mysql_db_query("users", $query); 
$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count; 
SetCookie ("Example",$CookieString, time()+3600); 
echo "Thank you for registering.
"; 
這段程式做了幾件工作:它檢查資料庫是否有這樣一個使用者(如果沒有,也就是說,這個cookie已被刪除),如果有,它指定舊的資訊,並用當前的資訊建一新的cookie,如果同一使用者沒有資料庫登入,建立一資料庫登入,並建一新的cookie.
首先,我們從資料庫中取回使用者登入詳細資料
mysql_connect() or die ("Problem connecting to DataBase"); 
$query="select * from info where FirstName='$FirstName' and 
LastName='$LastName' and email='$email'"; 
$result = mysql_db_query("users", $query); 
$r=mysql_fetch_array($result); 
$count=$r["count"];

現在檢查是否有一計數器為這使用者,利用isset()函數
 
if (isset($count)) { 
... 
} else { 
... 
} 
計數器增加並建立一cookie
$count++; //increase counter 
$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count; 
SetCookie ("Example",$CookieString, time()+3600); 
echo "

user $FirstName $LastName already exists. Using the existing info.

"; 
echo "

Back to Main Page";
如果沒有一使用者計數器,在mysql中加一記錄,並設一cookie
注意:在任何時候,setcookie放在輸送任何資料到瀏覽器之前,否則得到錯誤資訊

#####################################################
---advance翻譯,有不恰之處,請qianjinok@china.com-------

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.