PHP setcookie() 函式
示例
下面的示例建立一個名為“user”且值為“John Doe”的 cookie。此 cookie 將在 30 天后過期(86400 * 30)。“/”表示 cookie 在整個網站中可用(否則,請選擇您偏好的目錄)。
然後,我們檢索 cookie“user”的值(使用全域性變數 $_COOKIE)。我們還使用 isset() 函式來判斷 cookie 是否已設定。
<!DOCTYPE html>
<?php
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 天
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$cookie_name])) {
echo "名為 '" . $cookie_name . "' 的 cookie 未設定!";
} else {
echo "Cookie '" . $cookie_name . "' 已設定!<br>";
echo "值為: " . $_COOKIE[$cookie_name];
}
?>
</body>
</html>
自己動手試一試 »
定義和用法
setcookie() 函式定義一個 cookie,該 cookie 將隨其餘 HTTP 標頭一起傳送。
Cookie 通常用於識別使用者。Cookie 是伺服器嵌入使用者計算機中的一個小檔案。每次同一臺計算機使用瀏覽器請求頁面時,它也會發送 cookie。使用 PHP,您可以同時建立和檢索 cookie 值。
cookie 的名稱會自動分配給同名的變數。例如,如果傳送了一個名為“user”的 cookie,則會自動建立一個名為 $user 的變數,其中包含 cookie 的值。
注意: setcookie() 函式必須出現在 <html> 標記之前。
注意: 傳送 cookie 時,cookie 的值會自動進行 URL 編碼,接收時會自動解碼(要阻止 URL 編碼,請改用 setrawcookie())。
語法
setcookie(name, value, expire, path, domain, secure, httponly);
引數值
引數 | 描述 |
---|---|
name | 必需。指定 cookie 的名稱。 |
value | 可選。指定 cookie 的值。 |
expire | 可選。指定 cookie 何時過期。值:time()+86400*30,會將 cookie 設定為在 30 天后過期。如果省略此引數或將其設定為 0,則 cookie 將在會話結束時(瀏覽器關閉時)過期。預設值為 0。 |
path | 可選。指定 cookie 的伺服器路徑。如果設定為“/”,則 cookie 在整個域中都可用。如果設定為“/php/”,則 cookie 僅在 php 目錄及其所有子目錄中可用。預設值為設定 cookie 的當前目錄。 |
domain | 可選。指定 cookie 的域名。要使 cookie 在 example.com 的所有子域中都可用,請將 domain 設定為“example.com”。將其設定為 www.example.com 將僅使 cookie 在 www 子域中可用。 |
secure | 可選。指定 cookie 是否僅透過安全的 HTTPS 連線傳輸。TRUE 表示僅在存在安全連線時才設定 cookie。預設值為 FALSE。 |
httponly | 可選。如果設定為 TRUE,則只能透過 HTTP 協議訪問 cookie(指令碼語言無法訪問 cookie)。此設定有助於減少透過 XSS 攻擊進行的身份盜竊。預設值為 FALSE。 |
技術詳情
返回值 | 成功時為 TRUE。失敗時為 FALSE |
---|---|
PHP 版本 | 4+ |
PHP 更新日誌 | PHP 5.5 - Max-Age 屬性包含在傳送給客戶端的 Set-Cookie 標頭中。 PHP 5.2 - 添加了 httponly 引數。 |
更多示例
示例
多個 cookie 過期日期
<?php
$value = "Hello world!";
// cookie 將在瀏覽器關閉時過期
setcookie("myCookie", $value);
// cookie 將在 1 小時後過期
setcookie("myCookie", $value, time() + 3600);
// cookie 將在 1 小時後過期,並且只能在
// php 目錄 + php 的所有子目錄中可用
setcookie("myCookie", $value, time() + 3600, "/php/");
?>
<html>
<body>
...some code...
</body>
</html>
自己動手試一試 »
示例
要修改 cookie,只需使用 setcookie() 函式(再次)設定 cookie 即可。
<?php
$cookie_name = "user";
$cookie_value = "Alex Porter";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$cookie_name])) {
echo "名為 '" . $cookie_name . "' 的 cookie 未設定!";
} else {
echo "Cookie '" . $cookie_name . "' 已設定!<br>";
echo "值為: " . $_COOKIE[$cookie_name];
}
?>
</body>
</html>
自己動手試一試 »
示例
要刪除 cookie,請使用帶有過去過期日期的 setcookie() 函式。
<?php
// 設定過期日期為一小時前
setcookie("user", "", time() - 3600);
?>
<html>
<body>
<?php
echo "Cookie 'user' 已刪除。";
?>
</body>
</html>
自己動手試一試 »
示例
建立一個小指令碼來檢查 cookie 是否已啟用。首先,嘗試使用 setcookie() 函式建立一個測試 cookie,然後計算 $_COOKIE 陣列變數。
<?php
setcookie("test_cookie", "test", time() + 3600, '/');
?>
<html>
<body>
<?php
if(count($_COOKIE) > 0) {
echo "Cookie 已啟用。";
} else {
echo "Cookie 已停用。";
}
?>
</body>
</html>
自己動手試一試 »
❮ PHP 網路參考