thinkphp必须手动开启session.cookie_secure和session.cookie_httponly,否则phpsessid可能明文传输或被js读取;需在public/index.php开头调用ini_set()设置,并配合session_regenerate_id(true)防会话固定。

session.cookie_secure 和 session.cookie_httponly 必须手动开启
ThinkPHP 不会自动设置这两个关键 Cookie 标志,哪怕你已部署 HTTPS。不设 session.cookie_secure,PHPSESSID 就可能走 HTTP 明文传输;不设 session.cookie_httponly,XSS 成功后 JS 就能直接读走 document.cookie 中的会话 ID。
必须在 session_start() 之前执行:
-
ini_set('session.cookie_secure', '1')—— 生产环境 HTTPS 下必开,开发环境没配 HTTPS 则不能开,否则 Cookie 根本不发,登录失败 -
ini_set('session.cookie_httponly', '1')—— 所有环境都应开启,防 JS 读取 -
ini_set('session.use_only_cookies', '1')—— 强制只走 Cookie,禁用 URL fallback
这些调用得放在入口文件(如 public/index.php 开头)或全局中间件最前面,晚于 session_start() 就失效。
登录成功后必须调用 session_regenerate_id(true)
ThinkPHP 默认不做会话固定防护。攻击者可提前构造带固定 PHPSESSID 的登录链接(比如 /login?PHPSESSID=attacker123),用户一登录,就沿用这个 ID,攻击者立刻接管会话。
正确做法是在认证通过、写入用户数据前立即执行:
- 调用
session_regenerate_id(true),true参数表示删除旧 session 文件,漏掉它,旧文件仍留在磁盘上,可被重放 - 之后再写入
$_SESSION['uid']、$_SESSION['login_time']等敏感字段 - 不能用
Session::clear()或Session::destroy()替代——它们只清数据,不换 ID - 确保这行代码在任何响应输出(如
redirect()、json())之前执行,否则 headers already sent 会报错
禁用 trans_sid 并启用 strict_mode 防 URL 泄露和非法 ID
PHP 默认可能开启 session.use_trans_sid,一旦启用,所有相对 URL(如 /user/profile)都会被自动拼上 ?PHPSESSID=xxx,极易被代理、Referer、访问日志泄露。
同时,session.use_strict_mode = 1 能拒绝所有未知会话 ID 的初始化请求,从底层堵住会话固定入口:
-
ini_set('session.use_trans_sid', '0')—— 彻底关闭 URL 传 ID -
ini_set('session.use_strict_mode', '1')—— 拒绝未注册过的会话 ID 初始化 - 这两项也必须在
session_start()前设置,ThinkPHP 的Session::init()不接管 ini 配置
Cookie 配置必须写死在 config/app.php 的 cookie 数组里
ThinkPHP 6 的 Cookie 安全配置只认 config/app.php 中的 'cookie' => [] 块,改其他文件(如 config/cookie.php)完全无效。
关键项要写全:
-
'secure' => true—— 反向代理(如 Nginx 终止 HTTPS)下需额外处理:要么在public/index.php开头强制$_SERVER['HTTPS'] = 'on',要么直接写死为true -
'httponly' => true—— 对PHPSESSID是刚需 -
'samesite' => 'Lax'—— 比None更安全;若必须用None,则secure必须为true,否则浏览器拒绝接收 -
'domain' => '.yourdomain.com'—— 注意开头的点号,否则子域间 Cookie 不共享
别依赖 Request::isSsl() 动态判断后赋值,它和 Cookie 发送逻辑不同步,容易失效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











