登录
首页 >  文章 >  php教程

PHP设置Cookie有效时间全攻略

时间:2026-03-01 22:12:40 178浏览 收藏

本文深入解析了PHP中设置Cookie有效期的核心要点与常见误区:明确指出setcookie()的expires参数必须为整数型Unix时间戳,传入字符串将导致Cookie退化为会话级、立即失效;强调其与session.cookie_lifetime完全无关,避免新手混淆手动Cookie与Session机制;更关键的是,直击安全盲区——HttpOnly和Secure标志必须显式启用,否则极易引发XSS窃取或HTTPS下Cookie丢失,并详解了PHP 7.3+数组语法的规范用法及SameSite等现代安全选项,堪称PHP Cookie开发不可忽视的实战指南。

初学者学php cookie有效期咋设_初学者学php设有效期方法【存储】

setcookie() 的 expires 参数必须是时间戳,不是字符串

PHP 设置 Cookie 有效期靠的是 setcookie() 函数的第 3 个参数 $expires,它要求传入一个**整数型时间戳**(秒级,从 Unix 纪元起算),不是 "1 hour""2025-12-31" 这类字符串。传错类型会导致 Cookie 变成会话 Cookie(浏览器关闭即失效)。

  • 正确写法:setcookie('user_id', '123', time() + 3600)(1 小时后过期)
  • 错误写法:setcookie('user_id', '123', '3600')(字符串被转为 0,等效于立即过期)
  • 错误写法:setcookie('user_id', '123', strtotime('+1 hour'))strtotime() 返回整数,看似对,但要注意时区——若未设默认时区,可能出错)

session.cookie_lifetime 和 setcookie() 互不影响

初学者常混淆 PHP 的会话机制和手动 Cookie。PHP 的 session_start() 默认创建的 Session Cookie 由配置项 session.cookie_lifetime 控制;而你用 setcookie() 手动写的 Cookie 完全独立,它的有效期只取决于你传给它的 $expires 值。

  • ini_set('session.cookie_lifetime', 86400) 只影响 $_SESSION 关联的 Cookie
  • setcookie('theme', 'dark', time() + 600) 的 10 分钟有效期不受上述设置干扰
  • 两者可共存,但别指望改 session 配置能延长你手写的 Cookie

安全设置:HttpOnly 和 Secure 必须显式开启

Cookie 默认可被 JavaScript 读取(document.cookie),存在 XSS 泄露风险;若网站已启用 HTTPS,不加 Secure 标志会导致浏览器拒绝发送该 Cookie。这些选项不是“可选”,而是上线前必须确认的项。

  • 基础安全写法:setcookie('token', $val, time() + 3600, '/', '', true, true)
  • 参数顺序:name, value, expires, path, domain, secure, httponly
  • secure = true 表示仅通过 HTTPS 传输(HTTP 站点设为 true 后 Cookie 不会被发送)
  • httponly = true 表示 JS 无法访问(document.cookie 里看不到)
setcookie('login_hash', $hash, [
    'expires' => time() + 7200,
    'path' => '/',
    'domain' => '.example.com',
    'secure' => true,
    'httponly' => true,
    'samesite' => 'Strict'
]);

PHP 7.3+ 支持关联数组传参,更清晰;但注意 samesite 值必须是 'Strict''Lax''None'(后者需同时设 secure => true)。漏掉 httponlysecure 是生产环境常见低级失误。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于文章的相关知识,也可关注golang学习网公众号。

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>