PHP 程式設計/Cookies
Cookies 是儲存在客戶端計算機上的小型文字資料。通常,Cookie 僅用於儲存少量資料,包括使用者偏好、時間等。儘管 Cookie 本身並不有害,但有些人出於隱私方面的考慮,不允許使用 Cookie。在這種情況下,您需要使用 會話。
Cookies 最初是由 Netscape 引入的。PHP 允許輕鬆設定和檢索 Cookie。
使用 setcookie()[1] 可以非常輕鬆地設定 Cookie。
- 語法
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]])
其中 name 是 Cookie 的名稱,value 是要包含在 Cookie 中的資料,expire 是 Cookie 過期的時間,path 是伺服器上可以使用 Cookie 的路徑,domain 可用於設定子域的許可權,secure 如果設定為 true,則僅在存在安全連線時才傳輸 Cookie。
由於所有 Cookie 都是由伺服器與 HTTP 標頭一起傳送的,因此您需要在頁面開始處設定任何 Cookie,在任何其他程式碼之前。您通常只需要使用 name、value 和 expire 引數。如果沒有設定 expire,則 Cookie 將在客戶端關閉瀏覽器時過期。
- 示例
setcookie("wikibooks", "user", time()+3600);
上面的程式碼將設定一個名為 wikibooks、值為 user 的 Cookie,並且將在設定後一小時過期。
setcookie("test", "PHP-Hypertext-Preprocessor", time()+60, "/location", 1);
這裡,setcookie 函式被呼叫了四個引數(setcookie 還有一個可選引數,這裡沒有使用)。在上面的程式碼中,第一個引數是 Cookie 的名稱,第二個引數是 Cookie 的內容,第三個引數是 Cookie 過期的時間,以秒為單位(time() 返回當前時間的秒數,因此 time()+60 表示從現在開始一分鐘)。路徑或位置元素可以省略,但它確實允許您輕鬆地為目錄中的所有頁面設定 Cookie,儘管不建議使用此方法。
請注意,由於 Cookie 是與 HTTP 標頭一起傳送的,因此程式碼必須位於頁面頂部(是的,即使在 DOCTYPE 宣告之上)。任何其他位置都會產生錯誤。
如果伺服器在使用者的計算機上設定了一個 Cookie,那麼使用者的瀏覽器在每次頁面載入時都會將它傳送到伺服器。您伺服器傳送的每個 Cookie 的名稱都儲存在超級全域性陣列 _COOKIE 中。因此,在上面的示例中,可以透過呼叫 $_COOKIE['test'] 來檢索 Cookie。為了訪問 Cookie 中的資料,我們使用 explode()[2]。explode() 將字串變成一個帶有特定分隔符的陣列。這就是我們在 Cookie 內容中使用那些短劃線(- 連字元)的原因。因此,要檢索和打印出 Cookie 中的完整 PHP 形式,我們使用以下程式碼
$array = explode("-", $_COOKIE['test']); //retrieve contents of cookie
print("PHP stands for " . $array[0] . $array[1] . $array[2]); //display the content
注意:$_COOKIE 在 4.1.0 版中引入。在早期版本中,使用 $HTTP_COOKIE_VARS。
Cookie 通常用於
- 使用者偏好
- 庫存
- 測驗或投票結果
- 使用者認證
- 記住更長時間的資料
您絕不應該在 Cookie 中儲存未加密的密碼,因為 Cookie 可以被其他使用者輕鬆讀取。
您絕不應該在 Cookie 中儲存關鍵資料,因為 Cookie 可以被其他使用者輕鬆刪除或修改。