您好!欢迎访问家园网-www.jy.wang!

家园网

请举例讲解php中cookie如何创建,讲清楚它的语法结构,讲清楚所有函数的参数

网络 作者:本站 点击:

PHP Cookie 创建详解

一、setcookie() 函数完整语法结构

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

二、参数详解表

参数类型默认值说明示例值
$namestring必填Cookie名称"user_token"
$valuestring""Cookie值(空字符串表示删除)"abc123"
$expiresint0过期时间(Unix时间戳)
0=会话结束时过期
time()+3600
$pathstring""有效路径
""=当前目录及子目录
"/account"
$domainstring""有效域名
""=当前域名
".example.com"
$secureboolfalse是否仅HTTPS传输true
$httponlyboolfalse是否禁止JS访问true
$optionsarray[]PHP 7.3+新增参数
可设置SameSite等属性
['samesite'=>'Lax']

三、完整创建示例与逐行解析

<?php
// 示例1:基础Cookie设置(有效期1小时)
setcookie('visitor_id', 'v20230815', time() + 3600);
// 示例2:带完整参数的安全Cookie
setcookie(
    'auth_session',                  // 名称
    'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9',  // JWT令牌值
    time() + (86400 * 30),           // 30天有效期
    '/',                             // 全站有效
    '.mydomain.com',                 // 主域名及子域名
    true,                            // 仅HTTPS
    true,                            // 禁止JS访问
    ['samesite' => 'Strict']         // 防CSRF攻击
);
// 示例3:数组数据存储(自动编码)
$userPrefs = [
    'theme' => 'dark',
    'lang' => 'zh-CN',
    'font_size' => '16px'
];
setcookie('user_prefs', json_encode($userPrefs), time() + 31536000);
// 示例4:删除Cookie(设置过去时间)
setcookie('old_cookie', '', time() - 3600, '/account');
?>

逐行解析:

  1. 基础Cookie设置

    • 'visitor_id':Cookie标识名称

    • 'v20230815':简单字符串值

    • time() + 3600:当前时间+3600秒(1小时)后过期

  2. 安全Cookie设置

    • 第1参数:认证会话名称

    • 第2参数:JWT格式的加密令牌

    • 第3参数:86400*30计算30天的秒数

    • 第4参数:'/'使Cookie在全站有效

    • 第5参数:.mydomain.com允许子域名共享

    • 第6/7参数:true, true启用HTTPS和HttpOnly保护

    • 第8参数:['samesite'=>'Strict']防御CSRF攻击

  3. 数组数据存储

    • 使用json_encode()将数组转为JSON字符串存储

    • 31536000秒=1年有效期

    • 读取时需要用json_decode()解析

  4. 删除Cookie

    • 设置空值''

    • 过期时间设为过去time() - 3600

    • 必须匹配原始路径'/account'

四、参数特性深度说明

1. $expires 参数详解

  • 值为0‌:会话Cookie,浏览器关闭后失效

  • 未来时间戳‌:time()+秒数计算

  • 时间单位换算‌:

3600      // 1小时
86400     // 1天
604800    // 1周
2592000   // 30天
31536000  // 1年

2. $path 路径作用域

路径设置生效范围
'/'全站所有页面
'/blog'仅/blog及其子路径
''当前目录及子目录

3. $domain 域名作用域

域名设置生效范围
'example.com'仅精确匹配
'.example.com'主域及所有子域
''当前访问域名

4. 安全参数组合

// 高安全配置模板
setcookie($name, $value, [
    'expires' => time() + 86400,
    'path' => '/',
    'domain' => '.example.com',
    'secure' => true,
    'httponly' => true,
    'samesite' => 'Strict'
]);

五、特殊场景处理

1. 含特殊字符的值

// 需要URL编码
setcookie('search_query', urlencode('price < 100 AND category = "electronics"'), time()+3600);
// 读取时解码
$query = urldecode($_COOKIE['search_query']);

2. 批量设置Cookie

$cookies = [
    'user_id' => '12345',
    'session_token' => bin2hex(random_bytes(16))
];
foreach($cookies as $name => $value) {
    setcookie($name, $value, time()+86400, '/', '', true, true);
}

3. 检测Cookie是否设置成功

if (isset($_COOKIE['test_cookie'])) {
    echo "Cookie设置成功!";
} else {
    echo "请检查:1.是否有输出前调用 2.浏览器是否禁用Cookie";
}

六、关键注意事项

  1. 输出时机
    setcookie()必须在任何HTML输出前调用(包括空格和空行)

  2. 编码规范

    • 名称只能使用字母、数字和下划线

    • 值超过4KB可能被浏览器拒绝

  3. 隐私合规

    • 欧盟GDPR要求显示Cookie使用声明

    • 敏感数据应配合Session使用

  4. 调试技巧

// 查看所有Cookie
print_r($_COOKIE);
// 浏览器开发者工具查看
// Application → Cookies
  1. PHP版本差异

    • 7.3+推荐使用数组参数格式

    • 5.6以下需手动设置SameSite属性

通过以上全面讲解,您应该已经掌握了PHP中创建Cookie的所有技术细节。合理使用Cookie可以极大增强Web应用的交互体验,但切记要遵循安全最佳实践。

标签: