setcookie()

1. 定义

该函数定义一个Cookie,并将其连同剩下的HTTP头一起发送给客户端。 成功运行时返回TRUE,失败则返回FALSE。

注:

  • 该函数与输出HTTP头一样,在调用该函数之前不允许产生任何输出
  • Cookie值被保存在用户电脑中,不建议存储敏感信息

2. 语法

setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] ) : bool

3. 参数说明

参数 可选性 数据类型 描述
$name 必需 字符串 cookie名称
$value 可选 字符串 cookie值,默认为空字符串
$expire 可选 整型 cookie的过期时间,该参数为一个UNIX时间戳,例如十天后过期可以设置为time()+10*24*60*60strtotime('+10 days')
$path 可选 字符串 cookie的有效服务器路径。设置为/时表示对整个域名$domain都有效,设置为/user/时仅对$domainuser目录及其子目录有效。默认为仅对当前目录有效
$domain 可选 字符串 cookie的有效域名或子域名。设置为子域名(例如www.jisuapi.com时)表示对这个域名和它的三级域名(例如w3.www.jisuapi.com)有效;设置为域名(例如jisuapi.com)时对整个域名及其子域名都有效
$secure 可选 布尔值 是否仅通过安全的HTTPS连接来发送cookie值,默认为false,不仅
$httponly 可选 布尔值 是否仅通过HTTP协议来发送cookie值,默认为false,不仅

4. 示例

<?php

// setcookie()
// 定义一个`Cookie`,并将其连同剩下的HTTP头一起发送给客户端

/* 可以在浏览器的开发者工具 Network 的 Headers 部分的 Request Headers 的Cookie中看到设置的 cookie 值 */
setcookie('cookiename', 'cookievalue');
setcookie('cookiename', 'cookievalue', strtotime('+1 day'));
setcookie('cookiename', 'cookievalue', strtotime('+1 day'), '/case/', 'localhost');
// echo $_COOKIE['cookiename'];// cookievalue

/* 在设置cookie之前不能有任何输出,但可以通过`ob_start()`和`ob_end_flush()`函数来缓冲输出,直到浏览器接收它们 */
ob_start();
setcookie('cookiename', 'cookievalue');
setcookie('cookiename', 'cookievalue', strtotime('+1 day'));
echo $_COOKIE['cookiename'];// cookievalue
ob_end_flush();

/* 设置一个数组格式的cookie */
setcookie('cookiearr[0]', 1);
setcookie('cookiearr[1]', 2);
setcookie('cookiearr[2]', 3);
print_r($_COOKIE['cookiearr']);
/* 输出:
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
 */

5. 延展阅读

  • header():用于向浏览器发送原生的 HTTP 头
  • setrawcookie():发送未经 URL 编码的cookie,并将其连同剩下的 HTTP 头一起发送给客户端