在本教程中,您將學(xué)習(xí)如何使用PHP cookie在用戶的瀏覽器內(nèi)部存儲少量信息。
Cookie是一個小型文本文件,可讓您在用戶計算機(jī)上存儲少量數(shù)據(jù)(最大4KB左右)。它們通常用于跟蹤諸如用戶名之類的信息,當(dāng)用戶下次訪問網(wǎng)站時,網(wǎng)站可以檢索該信息以顯示特定個性化頁面。
提示:每次瀏覽器向服務(wù)器請求頁面時,cookie中的所有數(shù)據(jù)都會自動發(fā)送到請求內(nèi)的服務(wù)器。
setcookie()函數(shù)用于在PHP中設(shè)置cookie。 確保在腳本生成的任何輸出之前調(diào)用setcookie()函數(shù),否則將不會設(shè)置cookie。 該函數(shù)的基本語法可以通過以下方式給出:
setcookie(name, value, expire, path, domain, secure);
該setcookie()函數(shù)的參數(shù)具有以下含義:
參數(shù) | 描述 |
---|---|
name | Cookie的名稱。 |
value | Cookie的值。由于此值存儲在用戶的計算機(jī)上,因此請勿存儲敏感信息。 |
expires | UNIX時間戳格式的過期日期。 在此時間之后,cookie將變得不可訪問。 默認(rèn)值為0 |
path | 在服務(wù)器上指定cookie可用的路徑。如果設(shè)置為/,則cookie將在整個域中可用。 |
domain | 指定可用于其Cookie的域,例如:www.jixiangtaizi.com.cn。 |
secure | 該字段(如果存在)表示僅當(dāng)存在安全的HTTPS連接時才發(fā)送cookie。 |
提示:如果cookie的過期時間設(shè)置為0或省略,則cookie將在會話結(jié)束時即瀏覽器關(guān)閉時過期。
下面是一個使用setcookie()函數(shù)創(chuàng)建名為userName的cookie并為其賦值John Carter的示例。 同時指定cookie過期時間為30天(30 days * 24 hours * 60 min * 60 sec)。
<?php //設(shè)置Cookie setcookie("username", "John Carter", time()+30*24*60*60); ?>
注意:除名稱外,所有參數(shù)都是可選的。您也可以用空字符串(“”)替換參數(shù)以跳過該參數(shù),但是要跳過expire參數(shù),請改用零,因為它是整數(shù)。
警告:請勿將敏感數(shù)據(jù)存儲在Cookie中,因為惡意用戶可能會操縱敏感數(shù)據(jù)。為了安全地存儲敏感數(shù)據(jù),請使用Session。
PHP 超全局變量$_COOKIE用于檢索cookie值。它通常是一個關(guān)聯(lián)數(shù)組,其中包含瀏覽器在當(dāng)前請求中發(fā)送的所有cookie值的列表,并以cookie名稱為關(guān)鍵字??梢允褂脴?biāo)準(zhǔn)數(shù)組符號訪問單個cookie值,例如,要顯示在上一個示例中設(shè)置的用戶名cookie,可以使用以下代碼。
<?php //訪問單個Cookie值 echo $_COOKIE["username"]; ?>
上面示例中的PHP代碼產(chǎn)生以下輸出。
John Carter
在訪問cookie的值之前,最好先檢查是否已設(shè)置cookie。為此,您可以使用PHP isset()函數(shù),如下所示:
<?php //驗證是否設(shè)置了cookie if(isset($_COOKIE["username"])){ echo "Hi " . $_COOKIE["username"]; } else{ echo "Welcome Guest!"; } ?>
您可以使用像 print_r($_cookie);這樣的print_r()函數(shù)來查看這個$_cookie關(guān)聯(lián)數(shù)組的結(jié)構(gòu),就像您處理其他數(shù)組一樣。
您可以通過使用cookie名稱和任何值(例如空字符串)調(diào)用相同的setcookie()函數(shù)來刪除cookie,但是您需要設(shè)置為現(xiàn)在之前的過期日期,如下例所示:
<?php //刪除cookie setcookie("username", "", time()-3600); ?>
提示:您應(yīng)該傳遞與首次創(chuàng)建Cookie時使用的路徑,域和其他參數(shù)完全相同的名稱,以確保刪除正確的Cookie。