ThinkPHP中废弃的表单令牌生成机制如何升级_使用Token验证中间件

大雪君_4844

大雪君_4844

2026-04-15

981人浏览

原创

ThinkPHP 6.0+ 中 token() 函数已移除,须启用 TokenValidateMiddleware 中间件,表单隐藏域仍写 {:token()}(由中间件自动注入),且依赖 session 正常工作与域名/端口一致。

thinkphp中废弃的表单令牌生成机制如何升级_使用token验证中间件

ThinkPHP 6.0+ 中 token() 函数已不可用

直接调用 token() 或在模板中写 {:token()} 会报错:「Function token not found」。这是因为 ThinkPHP 6.0 起彻底移除了全局函数式令牌生成,改由中间件 + 请求生命周期统一管控。如果你是从 TP5 升级上来,别再找替代函数——它本就不该在视图层手动生成。

必须启用 TokenValidateMiddleware 中间件

TP6 的 Token 验证完全依赖中间件拦截,不注册就等于没开。默认配置下该中间件未启用,需手动加入 app/middleware.php:

return [
    // 其他中间件...
    \think\middleware\TokenValidateMiddleware::class,
];

注意两点:

  • 该中间件仅对 POST、PUT、DELETE 请求生效,GET 请求不会校验
  • 若使用多应用模式,需在对应应用的 middleware.php 中注册,而非全局入口
  • 中间件顺序无关紧要,但它必须在 SessionInit 之后运行(否则拿不到 session 数据)

表单里必须用 token 隐藏域,且不能手动生成值

模板中仍需保留 这类写法,但此时的 {:token()} 是模板引擎自动注入的(由中间件预设),不是调用函数。实际渲染时,框架会在响应输出前把 {:token()} 替换为当前有效令牌字符串。

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载

常见错误:

  • 手动拼接 value,比如 value="" —— 漏掉中间件注入逻辑,必然验证失败
  • 把 __token__ 改成其他字段名(如 csrf_token)—— 中间件只认默认名,不识别自定义
  • AJAX 提交时没带 __token__ 字段,或从 URL 参数传(如 ?__token__=xxx)—— 中间件只从 POST body 读取

调试 Token 失败时优先检查 session 和域名一致性

Token 验证失败(报错「token error」)80% 以上不是代码问题,而是环境配置偏差:

  • session 必须可用:确保 session.auto_start = false(TP6 要求手动启动),且 session.save_path 可写
  • 前后端域名/端口必须一致:前端用 http://localhost:8080 访问,后端却配了 cookie.domain = '.example.com',会导致 session 写入失败,进而令牌为空
  • 如果用了 Nginx 反向代理,确认是否透传了 Cookie 头,特别是 SameSite=None; Secure 场景下缺少 Secure 标志也会静默丢弃 cookie

Token 本质是 session 绑定的一次性哈希值,session 断了,令牌就断了——所有“生成失败”“验证不通过”的现象,先盯住 session 是否真正落盘。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

423

5

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

4067

6

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

2023.08.04

6925

6

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

601

5

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.07.09

1516

5

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

2024.08.07

3998

3

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

122

12

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

557

23

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

2026.03.16

179

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习