PHP setcookie() 函数

定义和用法

setcookie() 函数用于定义与其余 HTTP 标头一起发送的 cookie。

Cookie 常用于识别用户。Cookie 是服务器嵌入到用户计算机上的小文件。每次同一台计算机通过浏览器请求页面时,它都会发送该 cookie。使用 PHP,您可以创建和检索 cookie 值。

Cookie 的名称会自动分配给同名的变量。例如,如果发送了一个名为 "user" 的 cookie,则会自动创建一个名为 $user 的变量,其中包含 cookie 的值。

注意:setcookie() 函数必须出现在 <html> 标签之前。

注意:发送 cookie 时,cookie 的值会自动进行 URL 编码;接收时,会自动进行解码(要防止 URL 编码,请使用 setrawcookie() 代替)。

实例

例子 1

下例创建了一个名为 "user" 的 Cookie,其值为 "Bill Gates"。该 Cookie 将在 30 天后过期(86400 * 30)。"/" 表示该 Cookie 在整个网站中都可用(否则,请选择您喜欢的目录)。

然后,我们检索名为 "user" 的 Cookie 的值(使用全局变量 $_COOKIE)。我们还使用 isset() 函数来检查 Cookie 是否已设置:

<!DOCTYPE html>  
<?php  
$cookie_name = "user";  
$cookie_value = "Bill Gates";  
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_name . "' 的 Cookie 已设置!<br>";  
    echo "值为: " . $_COOKIE[$cookie_name];  
}  
?>  
  
</body>  
</html>

亲自试一试

例子 2

为 cookie 设置多个过期日期:

<?php  
$value = "Hello world!";  
  
// 当浏览器关闭时,cookie 将过期  
setcookie("myCookie", $value);  
  
// cookie 将在 1 小时后过期  
setcookie("myCookie", $value, time() + 3600);  
  
// cookie 将在 1 小时后过期,并且仅可在  
// php 目录及其所有子目录中使用  
setcookie("myCookie", $value, time() + 3600, "/php/");  
?>  
<html>  
<body>  
  
...一些代码...  
  
</body>  
</html>

亲自试一试

例子 3

要修改 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_name . "' 的 cookie 已设置!<br>";  
    echo "值为: " . $_COOKIE[$cookie_name];  
}  
?>  
  
</body>  
</html>

亲自试一试

例子 4

要删除 cookie,请将 setcookie() 函数的过期日期设置为过去的时间:

<?php  
// 将过期日期设置为一小时前  
setcookie("user", "", time() - 3600);  
?>  
<html>  
<body>  
  
<?php  
echo "名为 'user' 的 cookie 已删除。";  
?>  
  
</body>  
</html>

亲自试一试

例子 5

创建一个小脚本来检查 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>

亲自试一试

语法

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

可选。指定是否仅通过安全的 HTTPS 连接传输 Cookie。

TRUE 表示仅当存在安全连接时才设置 Cookie。

默认为 FALSE。

httponly

可选。如果设置为 TRUE,则 Cookie 仅能通过 HTTP 协议访问(Cookie 无法通过脚本语言访问)。

此设置有助于减少通过 XSS 攻击进行的身份盗用。

默认为 FALSE。

技术细节

返回值: 成功时返回 TRUE,失败时返回 FALSE。
PHP 版本: 4+
PHP 更新日志:

PHP 5.5 - 在发送到客户端的 Set-Cookie 标头中包含了 Max-Age 属性;

PHP 5.2 - 添加了 httponly 参数。