cookie在使用者使用網站時一定常常遇到詢問要不要存取cookie,他就像一個瀏覽器裡的小紙條,用來儲存網站資料,存放位置在使用者的瀏覽器內,跟session有很大的關連,但今天就先只講cookie
cookie的安全性較低,適合存不敏感的資料
原因如下:
Cookie 儲存在使用者端 → 容易被竄改或偷取
Cookie 本身沒有加密他是明文傳輸 → 需配合 HTTPS、HttpOnly、Secure、SameSite
敏感資料不建議直接存在 Cookie,應該用 Session 儲存在伺服器
聽完之後或許會覺得cookie很不安全很不好,但是現今很多網站都會使用cookie來記錄不敏感的資料,讓使用者在下次使用該網站時,能夠保有上次的紀錄。
那cookie在php怎麼使用?
在 PHP 裡使用 Cookie,主要用途就是 讓網站「記住使用者的狀態或偏好」,方便後續操作或改善使用者體驗
cookie有分為 具有效期以及沒有效期
類型 | 有效期限 | 特性 |
---|---|---|
Session Cookie | 沒設定 | 瀏覽器關閉就消失 |
Persistent Cookie | 設定 | 關閉瀏覽器也會保留,直到過期 |
看一下 Persistent Cookie
<?php
// 讀取 Cookie
if(isset($_COOKIE["visits"])){
$visits = $_COOKIE["visits"] + 1;
} else {
$visits = 1;
}
// 設定 Cookie,有效期 1 天
setcookie("visits", $visits, time() + 86400, "/");
echo "你已經訪問本站 " . $visits . " 次!";
?>
可以實際執行後端程式碼 在瀏覽器,會看到每次刷新頁面次數都會一直往上增加,因為登入資料被記錄了,/
表示該 Cookie 在整個網站範圍內有效,86400為1天,因為php的time()時間單位為秒
可以把這行改成3秒,實際執行後端在重整會發現cookie的記憶變成只有3秒就會清掉了
setcookie("visits", $visits, time() + 3, "/");
這裡有個重點筆記:
每次刷新網頁,time() 都是 現在時間
time() + 86400 → 代表「從現在起 1 天後過期」
所以每次都會 重置過期時間,變成「從你最後一次訪問算起的 1 天」
好處:
只要使用者在一天內持續訪問,Cookie 永遠不會過期
這對訪客計數器或自動登入通常是 好事,因為希望 Cookie 保持有效