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

11次阅读

setcookie() 的 expires 参数必须是整数型时间戳,传字符串会导致 Cookie 变成会话 Cookie;其有效期与 session.cookie_lifetime 无关;httpOnly 和 Secure 必须显式开启以保障安全。

初学者学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 是生产环境常见低级失误。

立即学习PHP免费学习笔记(深入)”;

text=ZqhQzanResources