本文目录导读:

在PHP项目中,Cookie的作用域主要通过以下参数控制:
基本设置方法
使用 setcookie() 函数
setcookie(
'name', // Cookie名称
'value', // Cookie值
[
'path' => '/', // 作用路径
'domain' => '.example.com', // 作用域名
'samesite' => 'Lax', // SameSite属性
'httponly' => true,
'secure' => true,
]
);
作用域关键参数
domain - 域名作用域
// 只在当前域名生效
setcookie('test', 'value', ['domain' => 'example.com']);
// 所有子域名生效 (开头加点)
setcookie('test', 'value', ['domain' => '.example.com']);
// 对 www.example.com, blog.example.com 等都生效
path - 路径作用域
// 全站有效
setcookie('test', 'value', ['path' => '/']);
// 仅admin目录下有效
setcookie('test', 'value', ['path' => '/admin/']);
// 仅特定页面
setcookie('test', 'value', ['path' => '/user/profile']);
实际应用示例
多子域共享Cookie
// 登录站点设置
setcookie('session_id', $token, [
'domain' => '.example.com', // 所有子域共享
'path' => '/',
'expires' => time() + 86400,
'httponly' => true,
'secure' => true,
'samesite' => 'Lax'
]);
分权限Cookie作用域
// 用户通用Cookie
setcookie('user_lang', 'zh-CN', [
'domain' => '.example.com',
'path' => '/'
]);
// 管理员专用Cookie
setcookie('admin_token', $token, [
'domain' => 'admin.example.com',
'path' => '/admin/'
]);
安全和限制建议
安全配置
// 生产环境推荐配置
function setSecureCookie($name, $value, $expire = 0) {
$params = [
'expires' => $expire,
'path' => '/',
'domain' => '', // 不设置则仅当前域名
'secure' => isset($_SERVER['HTTPS']),
'httponly' => true,
'samesite' => 'Strict'
];
setcookie($name, $value, $params);
}
注意事项
- 域名限制:不能跨主域名设置(如不能从 example.com 设置到 test.com)
- 路径继承:子路径可以访问父路径的Cookie,反之不行
- 安全优先级:
SameSite=Strict>SameSite=Lax> 不设置Secure:仅HTTPS传输HttpOnly:禁止JavaScript访问
调试检测
// 查看当前Cookie作用域 echo '<pre>'; print_r($_COOKIE); echo '</pre>'; // 检查Cookie是否发送 echo '<pre>'; print_r(get_headers($_SERVER['HTTP_HOST']) ?? []); echo '</pre>';
常见问题解决
子域名无法共享Cookie
// 错误:使用完整域名
setcookie('key', 'value', ['domain' => 'www.example.com']); // 仅www子域
// 正确:使用点前缀
setcookie('key', 'value', ['domain' => '.example.com']); // 所有子域
路径不生效
// 确保路径以/
setcookie('key', 'value', ['path' => '/admin']); // 错误
setcookie('key', 'value', ['path' => '/admin/']); // 正确
总结建议
- 通用Cookie:
path: /, domain: .example.com - 敏感Cookie:加
HttpOnly, Secure, SameSite=Strict - 部分页面:限制
path到具体目录 - 避免跨域:不同主域需要不同方法(如OAuth)