PHP Cookie 面試題
Cookie 是 HTTP 協議中的一種機制,它可以在客戶端存儲一些數據,并在每次請求時隨請求一起發送給服務端。Cookie 可以解決 HTTP 協議無狀態的問題,這樣服務端就可以接收到客戶端的狀態信息了。
在 PHP 中,我們可以通過 setcookie() 函數來設置 Cookie。
setcookie(name,value,expire,path,domain,secure,httponly);
其中,name 和 value 表示 Cookie 的名稱和值;expire 表示 Cookie 的過期時間,這個時間是 Unix 時間戳,如果過期時間是某個時間點,在 PHP 中可以通過 time() 函數來獲取這個時間點的時間戳;path 表示 Cookie 的路徑;domain 表示要發送 Cookie 的域名;secure 表示 Cookie 是否只能通過 HTTPS 協議發送;httponly 表示 Cookie 是否只能通過 HTTP 協議訪問,這個屬性可以防止 XSS 攻擊。
在 PHP 中,我們可以通過 $_COOKIE 變量來獲取客戶端發送過來的 Cookie。
echo $_COOKIE["name"];
上面的代碼就可以獲取名為 name 的 Cookie 的值。
當客戶端發送請求時,服務端會自動接收到 Cookie。我們可以通過下面的代碼來查看客戶端發送過來的所有 Cookie。
print_r($_COOKIE);
如果客戶端發送過來了過期的 Cookie,服務端會自動忽略這個 Cookie,這個時候可以通過 unset() 函數來刪除這個 Cookie。
unset($_COOKIE["name"]);
使用 unset() 函數可以刪除名為 name 的 Cookie。
除了 setcookie() 函數,PHP 還提供了一個 session_set_cookie_params() 函數,該函數可以修改 session_id 的 Cookie 參數。例如:
session_set_cookie_params(3600,"/",".example.com",true,true); session_start();
上面的代碼表示:會話 Cookie 的過期時間為 3600 秒;路徑為根目錄(/);發送Cookie的域名是 example.com;只能通過 HTTPS 協議發送;只能通過 HTTP 協議訪問。
除了上述的基礎知識,面試官還可能會問到 Cookie 的應用場景,比如:
- 用戶登錄狀態的保持
- 購物車信息的保存
- 網站主題設置的保存
比如我們在 A 網站登錄后,如果不關閉瀏覽器,一段時間內再次訪問A 網站時,我們就不需要重新登錄了。這是因為A 網站使用了 Cookie 來保存用戶的登錄狀態。
在購物網站中,我們可以不登錄就可以將商品添加到購物車中,繼續瀏覽網站,下次再訪問時商品仍在購物車中,這是因為購物網站使用了 Cookie 來保存購物車信息。
網站的主題設置有時也會存在在 Cookie 中,這樣可以在下一次訪問時依然使用用戶之前選擇過的主題,不必每次都重新選擇。
總結
Cookie 是一種在客戶端存儲數據的機制,它可以解決 HTTP 協議無狀態的問題,用來保存用戶信息、購物車信息等。在 PHP 中,我們可以使用 setcookie() 函數來設置 Cookie,并且通過 $_COOKIE 變量來獲取客戶端發送過來的 Cookie。