PHP面试题更新 2026-08-03

在 PHP 中,Cookie 与 Session 在存储位置、生命周期、安全性及典型使用场景上有何不同?同时说明两者在代码中分别如何操作?

考察说明

考查对 PHP 会话机制中 Cookie 与 Session 核心差异的理解及基本操作能力。

回答思路

  1. 【回答框架 1】Cookie 存储在客户端浏览器,由服务器通过响应头 Set-Cookie 下发,请求时自动携带;Session 存储在服务端文件或内存,仅由服务器持有一个会话 ID,该 ID 通常通过 Cookie 传递给浏览器。
  2. 【回答框架 2】生命周期上,Cookie 可设置过期时间直至持久化,未设置则随浏览器关闭失效;Session 默认在服务端保留一定时间,可通过 session.gc_maxlifetime 等配置控制,也支持主动销毁。
  3. 【回答框架 3】安全性上,Cookie 内容可见且可篡改,不适合存敏感数据;Session 数据在服务端但会话 ID 可能被窃取,需配合 HTTPS、HttpOnly、Secure 等属性防护。
  4. 【回答框架 4】典型场景:记住登录状态、用户偏好等用 Cookie;购物车、登录凭证等敏感或较大数据用 Session。PHP 中操作 Cookie 用 setcookie(),读取 $_COOKIE;启动 Session 用 session_start(),操作 $_SESSION 数组,完成用 session_destroy()。
  5. 【回答框架 5】实际选择需考虑分布式环境,Session 可能需集中存储,如 Redis;Cookie 适合跨域场景,但受大小限制(一般 4KB)和隐私约束影响。
  6. 【关键点 1】Cookie 数据在客户端,Session 数据在服务端,二者通过会话 ID 关联。
  7. 【关键点 2】Session 默认依赖 Cookie 传递 ID,也可通过 URL 传递,但安全性更低。
  8. 【关键点 3】Cookie 可持久化,Session 默认浏览器会话结束,服务端有超时机制。
  9. 【关键点 4】敏感数据应放在 Session,非敏感的少量偏好可放 Cookie。
  10. 【关键点 5】PHP 中基本用法:setcookie()、$_COOKIE、session_start()、$_SESSION、session_destroy()。
  11. 【易错点 1】误以为 Session 数据完全安全,忽略会话固定(session fixation)攻击,需在登录后重新生成会话 ID。
  12. 【易错点 2】直接使用未加密的 Cookie 存储任意业务逻辑,可能被篡改导致越权或数据错误。
  13. 【易错点 3】分布式部署未共享 Session,导致用户登录状态在多台服务器间不一致,需统一存储方案。