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