PHP Cookie
cookie 常用于識(shí)別用戶。
Cookie 是什么?
Cookie是由服務(wù)器端生成,發(fā)送給User-Agent(一般是瀏覽器),瀏覽器會(huì)將Cookie的key/value保存到某個(gè)目錄下的文本文件內(nèi), 下次請(qǐng)求同一網(wǎng)站時(shí)就發(fā)送該Cookie給服務(wù)器(前提是瀏覽器設(shè)置為啟用cookie)。 Cookie名稱和值可以由服務(wù)器端開發(fā)自己定義,這樣服務(wù)器可以知道該用戶是否是合法用戶以及是否需要重新登錄等, 服務(wù)器可以設(shè)置或讀取Cookies中包含信息,借此維護(hù)用戶跟服務(wù)器會(huì)話中的狀態(tài)。
注意事項(xiàng):
1. 不同的電腦無(wú)法共享Cookie
2. 同一臺(tái)電腦中的不同的瀏覽器也無(wú)法共享Cookie
3. 同一個(gè)瀏覽器不同的域名下還是無(wú)法共享Cookie
4. 甚至同一個(gè)瀏覽器、同一個(gè)域名下,不同路徑的Cookie也無(wú)法實(shí)現(xiàn)共享
如何創(chuàng)建 Cookie?
通過(guò) setcookie() 函數(shù)來(lái)創(chuàng)建一個(gè) cookie ,成功返回 TRUE ,否則返回 FALSE 。
注釋:setcookie() 函數(shù)必須位于 <html> 標(biāo)簽之前。
語(yǔ)法
setcookie(name, value, expire, path, domain);
參數(shù)說(shuō)明:
參數(shù) 說(shuō)明
name cookie 名稱
value 可選,cookie 值
expire 可選,過(guò)期時(shí)間,時(shí)間戳格式
path 可選,服務(wù)器端有效路徑,/ 表示整個(gè)域名有效,默認(rèn)為當(dāng)前設(shè)置 cookie 時(shí)頁(yè)面的路徑
domain 可選,該 cookie 有效的域名
實(shí)例 1
在下面的例子中,我們將創(chuàng)建名為 "user" 的 cookie,并為它賦值 "php"。我們也規(guī)定了此 cookie 在一小時(shí)后過(guò)期:
<?php setcookie("user", "php", time()+3600); ?>
<html>
.....
注釋:在發(fā)送 cookie 時(shí),cookie 的值會(huì)自動(dòng)進(jìn)行 URL 編碼,在取回時(shí)進(jìn)行自動(dòng)解碼。
實(shí)例 2
您還可以通過(guò)另一種方式設(shè)置 cookie 的過(guò)期時(shí)間。這也許比使用秒表示的方式簡(jiǎn)單。
<?php $expire=time()+60*60*24*30; setcookie("user", "php", $expire); ?>
<html>
.....
在上面的實(shí)例中,過(guò)期時(shí)間被設(shè)置為一個(gè)月(60 秒 * 60 分 * 24 小時(shí) * 30 天)。
如何取回 Cookie 的值?
PHP 的 $_COOKIE 變量用于取回 cookie 的值。
在下面的實(shí)例中,我們?nèi)』亓嗣麨?"user" 的 cookie 的值,并把它顯示在了頁(yè)面上:
<?php
// 輸出 cookie 值
echo $_COOKIE["user"];
// 查看所有 cookie
print_r($_COOKIE);
?>
在下面的實(shí)例中,我們使用 isset() 函數(shù)來(lái)確認(rèn)是否已設(shè)置了 cookie:
<html> <head> <meta charset="utf-8"> <title>php中文網(wǎng)(php.cn)</title> </head> <body> <?php if (isset($_COOKIE["user"])) echo "歡迎 " . $_COOKIE["user"] . "!<br>"; else echo "普通訪客!<br>"; ?> </body> </html>
如何刪除 Cookie?
可以通過(guò)設(shè)置 cookie 過(guò)期時(shí)間為以前的時(shí)間點(diǎn)來(lái)刪除一個(gè) cookie :
刪除的實(shí)例:
<?php // 設(shè)置 cookie 過(guò)期時(shí)間為過(guò)去 1 小時(shí) setcookie("user", "", time()-3600); ?>
提示:
由于協(xié)議限制,在設(shè)置 cookie 之前,不能有任何內(nèi)容向?yàn)g覽器輸出
cookie 不會(huì)在設(shè)置的當(dāng)前頁(yè)生效,要訪問(wèn)設(shè)置的 cookie ,必須是另一個(gè)頁(yè)面在過(guò)期之前訪問(wèn)
由于 cookie 信息存儲(chǔ)于用戶的計(jì)算機(jī)中,那么就有可能偽造 cookie 從而造成 cookie 欺騙, 一般可以對(duì) cookie 的值進(jìn)行加密來(lái)預(yù)防欺騙。讀取 cookie 的時(shí)候,對(duì) cookie 解密即可
如果瀏覽器不支持 Cookie 該怎么辦?
如果您的應(yīng)用程序需要與不支持 cookie 的瀏覽器打交道,那么您不得不使用其他的辦法在您的應(yīng)用程序中的頁(yè)面之間傳遞信息。 一種方式是通過(guò)表單傳遞數(shù)據(jù)(有關(guān)表單和用戶輸入的內(nèi)容,在本教程的前面章節(jié)中我們已經(jīng)介紹過(guò)了)。
下面的表單在用戶單點(diǎn)擊 "Submit" 按鈕時(shí),向 "welcome.php" 提交了用戶輸入:
<html> <head> <meta charset="utf-8"> <title>php中文網(wǎng)(php.cn)</title> </head> <body> <form action="welcome.php" method="post"> 名字: <input type="text" name="name"> 年齡: <input type="text" name="age"> <input type="submit"> </form> </body> </html>
取回 "welcome.php" 文件中的值,如下所示:
<html> <head> <meta charset="utf-8"> <title>php中文網(wǎng)(php.cn)</title> </head> <body> 歡迎 <?php echo $_POST["name"]; ?>.<br> 你 <?php echo $_POST["age"]; ?> 歲了。 </body> </html>
Cookie的限制問(wèn)題
很多瀏覽器對(duì)Cookie的數(shù)量是有限制的,大多數(shù)瀏覽器規(guī)定一個(gè)網(wǎng)站可以設(shè)置的Cookie數(shù)量是不可以超過(guò)50個(gè)的, 部分瀏覽器甚至限制為30個(gè)
瀏覽器對(duì)Cookie的尺寸也有限制,一般不得超過(guò)4K大小
Cookie的安全問(wèn)題
如果在網(wǎng)吧上網(wǎng)后沒(méi)有關(guān)機(jī),其他人使用你的電腦后是可以查看到你訪問(wèn)的所有的網(wǎng)站歷史記錄以及網(wǎng)站保存的Cookie內(nèi)容的, 如果重要的數(shù)據(jù)(用戶名、密碼、卡號(hào)、手機(jī)號(hào)、身份證號(hào)……)保存在Cookie中是非常危險(xiǎn)的行為。
因此,重要數(shù)據(jù)不能存放在Cookie里,如果一定要保存還是得靠服務(wù)器