本文目录导读:

在PHP项目中配置Cookie有效期,主要有以下几种方式:
使用 setcookie() 函数
// 语法:setcookie(name, value, expire, path, domain, secure, httponly)
// 示例1:设置过期时间为1小时后
setcookie('username', 'john', time() + 3600);
// 示例2:设置过期时间为7天后
setcookie('user_token', 'abc123', time() + (7 * 24 * 3600));
// 示例3:设置过期时间为30天后
setcookie('remember_me', 'yes', time() + 30 * 24 * 3600);
常见时间单位换算
// 各种常见有效期
$expires = [
'1小时' => time() + 3600,
'1天' => time() + 86400,
'7天' => time() + 604800,
'30天' => time() + 2592000,
'1年' => time() + 31536000,
'会话结束' => 0 // 浏览器关闭时删除
];
使用 setrawcookie() 函数
// 如果需要对cookie值进行特殊编码,可以使用setrawcookie
setrawcookie('raw_cookie', rawurlencode('特殊字符'), time() + 86400);
高级配置示例
// 完整的cookie配置 $cookie_name = 'session_id'; $cookie_value = session_id(); $expire = time() + 86400; // 24小时后过期 $path = '/'; // 整个网站可用 $domain = 'example.com'; // 指定域名 $secure = true; // 仅HTTPS传输 $httponly = true; // 禁止JavaScript访问 setcookie($cookie_name, $cookie_value, $expire, $path, $domain, $secure, $httponly);
使用会话变量设置cookie
// 如果使用session,可以设置session的cookie生命周期
ini_set('session.cookie_lifetime', 86400); // 24小时
session_start();
// 或者在php.ini中永久配置
session.cookie_lifetime = 86400
删除cookie
// 将过期时间设置为过去的时间
setcookie('username', '', time() - 3600);
// 或者使用0作为时间
setcookie('username', '', 0);
注意事项
时间戳问题
- Cookie的过期时间是基于服务器的Unix时间戳
- 使用
time()函数获取当前时间戳 - 不要直接使用日期字符串,除非经过
strtotime()转换
// 错误示例
setcookie('test', 'value', '2024-12-31'); // 不会按预期工作
// 正确示例
setcookie('test', 'value', strtotime('2024-12-31'));
浏览器cookie限制
- 浏览器通常限制每个域名下的cookie数量(约50个)
- 单个cookie大小限制约4KB
- 不同浏览器行为可能略有差异
安全建议
// 敏感信息cookie
setcookie('token', $secure_token, [
'expires' => time() + 86400,
'path' => '/',
'domain' => 'example.com',
'secure' => true, // 仅HTTPS
'httponly' => true, // 防止XSS攻击
'samesite' => 'Strict' // 防止CSRF攻击(PHP 7.3+)
]);
实际应用示例
// 记住密码功能
function setRememberMeCookie($user_id) {
$token = bin2hex(random_bytes(32)); // 生成安全令牌
$expiry = time() + (30 * 24 * 3600); // 30天
setcookie('remember_token', $token, $expiry, '/', '', true, true);
setcookie('user_id', $user_id, $expiry, '/', '', true, true);
// 将token存储到数据库
saveRememberToken($user_id, $token);
}
// 检查cookie是否过期
if(isset($_COOKIE['remember_token'])) {
// cookie仍然有效
validateRememberToken($_COOKIE['user_id'], $_COOKIE['remember_token']);
}
选择合适的有效期取决于你的应用需求:记住登录状态通常设置为7-30天,临时数据设置几个小时,敏感信息可以考虑设置更短的有效期。