在 php 中設(shè)置和讀取 Cookie 主要用 setcookie() 函數(shù)和 $_cookie 超全局?jǐn)?shù)組。1. 設(shè)置 cookie:使用 setcookie(“name”, “value”, expire, path, domain, secure, httponly),其中 name 和 value 為必填,其他參數(shù)可選,例如 setcookie(“user”, “johndoe”, time()+3600, “/”);注意 setcookie() 必須在任何輸出前調(diào)用。2. 讀取 cookie:通過 $_cookie[“name”] 獲取,如 isset($_cookie[“user”]) 來判斷是否存在該 cookie,且需刷新頁面后才能讀取到新設(shè)置的 cookie。3. 刪除 cookie:將過期時(shí)間設(shè)為過去的時(shí)間點(diǎn),如 setcookie(“user”, “”, time()-3600, “/”),同時(shí)建議保留與設(shè)置時(shí)相同的路徑和域名以確保正確刪除。
在 PHP 中設(shè)置和讀取 Cookie 是 Web 開發(fā)中比較常見的操作,主要用于用戶狀態(tài)識(shí)別、記錄登錄信息等場(chǎng)景。要完成這個(gè)過程,主要用到 setcookie() 函數(shù)來設(shè)置 Cookie,然后通過超全局?jǐn)?shù)組 $_COOKIE 來讀取。
設(shè)置 Cookie:使用 setcookie() 函數(shù)
PHP 中設(shè)置 Cookie 主要用 setcookie() 這個(gè)函數(shù)。它的基本語法如下:
setcookie(name, value, expire, path, domain, secure, httponly);
其中,只有前兩個(gè)參數(shù)(name 和 value)是必填的,其他都是可選的。比如下面這個(gè)例子:
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
setcookie("user", "JohnDoe", time()+3600, "/");
這行代碼的意思是:設(shè)置一個(gè)名為 user 的 Cookie,值為 JohnDoe,有效期是一小時(shí)(當(dāng)前時(shí)間加 3600 秒),路徑為網(wǎng)站根目錄 /,這樣整個(gè)網(wǎng)站都能訪問到這個(gè) Cookie。
注意:setcookie() 必須在任何輸出之前調(diào)用,否則會(huì)報(bào)錯(cuò)。也就是說,在它執(zhí)行之前不能有任何 html 輸出或空格。
讀取 Cookie:使用 $_COOKIE 超全局變量
當(dāng) Cookie 被成功設(shè)置后,就可以通過 $_COOKIE 數(shù)組來讀取了。例如:
if (isset($_COOKIE["user"])) { echo "歡迎回來," . $_COOKIE["user"]; } else { echo "你是新訪客"; }
這段代碼判斷是否存在名為 user 的 Cookie,如果存在就顯示歡迎語句。
一個(gè)小細(xì)節(jié)是:Cookie 是從客戶端發(fā)送到服務(wù)器的,所以你必須刷新頁面一次才能看到剛剛設(shè)置的 Cookie 出現(xiàn)在 $_COOKIE 中。
刪除 Cookie:設(shè)置過期時(shí)間
PHP 并沒有專門的刪除 Cookie 函數(shù),而是通過設(shè)置一個(gè)已經(jīng)過去的過期時(shí)間來實(shí)現(xiàn)“刪除”效果。例如:
setcookie("user", "", time()-3600, "/");
這里把 user 的過期時(shí)間設(shè)為了過去的一小時(shí),瀏覽器會(huì)自動(dòng)清除這個(gè) Cookie。
需要注意的是,刪除時(shí)最好保留與設(shè)置時(shí)相同的路徑(path)和域名(domain)參數(shù),否則可能無法正確刪除。
基本上就這些。設(shè)置和讀取 Cookie 在 PHP 中不算復(fù)雜,但有些細(xì)節(jié)容易忽略,比如輸出順序、路徑問題、刪除方式等,稍不注意就可能導(dǎo)致功能異常。