Cookies 是瀏覽器的一項功能。
當我們向瀏覽器發送一個響應時,我們可以設置一個 cookie,並且該 cookie 會通過瀏覽器在客戶端保存。
然後,瀏覽器發送的每個請求都會將 cookie 返回給我們。
我們可以使用 cookie 來做很多事情,它們主要用於在不需要登錄服務的情況下創建個性化體驗。
需要注意的是,cookie 是特定於域名的,所以我們只能讀取我們設置在應用程序當前域名上的 cookie,不能讀取其他應用程序的 cookie。
但是 JavaScript 可以讀取 cookie(除非它們是HttpOnly cookies,但這樣我們就要進入一個兔子洞了),所以 cookie 不應該存儲任何敏感信息。
我們可以使用 PHP 通過引用 $\_COOKIE
超全局變量來讀取 cookie 的值:
if (isset($\_COOKIE['name'])) {
$name = $\_COOKIE['name'];
}
setcookie()
函數允許您設置一個 cookie:
setcookie('name', 'Flavio');
我們可以添加第三個參數來指定 cookie 的過期時間。如果省略,則 cookie 在會話結束時(或瀏覽器關閉時)過期。
使用以下代碼使 cookie 在 7 天後過期:
setcookie('name', 'Flavio', time() + 3600 \* 24 \* 7);
我們在 cookie 中只能存儲有限的數據量,而且用戶在清除瀏覽器數據時可以在客戶端清除 cookie。
同時,cookie 是特定於瀏覽器/設備的,所以我們可以在用戶的瀏覽器中設置一個 cookie,但如果他們更換了瀏覽器或設備,該 cookie 將不可用。
讓我們通過之前使用的表單進行一個簡單的示例。我們將輸入的名稱存儲為 cookie:
<?php
if (isset($\_POST['name'])) {
setcookie('name', $\_POST['name']);
}
if (isset($\_POST['name'])) {
echo '<p>Hello ' . $\_POST['name'];
} else {
if (isset($\_COOKIE['name'])) {
echo '<p>Hello ' . $\_COOKIE['name'];
}
}
?>
<form method="POST">
<input type="text" name="name" />
<input type="submit" />
</form>
我添加了一些條件語句來處理已經設置的 cookie 的情況,以及在提交表單後立即顯示名稱的情況,當 cookie 還沒有設置時(它只會設置在下一個 HTTP 請求中)。
如果您打開瀏覽器的開發者工具,您應該在存儲選項卡中看到 cookie。
從那裡,您可以檢查其值,並在需要時刪除它。