ThinkPHP绑定域名后表单提交失败,如何确保域名与Token验证一致?
- 内容介绍
- 文章标签
- 相关推荐
本文共计857个文字,预计阅读时间需要4分钟。
直接原因很明确:
session.cookie_domain 配置必须显式匹配新域名
ThinkPHP 默认不干预 PHP 的 session 配置,它依赖底层 session_start() 的行为。一旦你把站点从 localhost 或 127.0.0.1 绑定到正式域名(比如 www.example.com),就必须手动设置 cookie 域名,否则浏览器不会把 session cookie 发给新域名。
- 在
config/session.php中添加或修改:'domain' => '.example.com'(注意开头的点,表示兼容子域名) - 如果只用主域名,不带子域,写成
'domain' => 'www.example.com'也可以,但更推荐前者 - 切勿留空或写成
localhost—— 这会导致新域名下 session 完全失效 - 改完后清掉浏览器所有该域名下的 Cookie,否则旧 cookie 仍会干扰
表单渲染和提交必须发生在同一域名上下文
很多人忽略一点:{:token()} 渲染时用的是当前请求的域名 + session ID 生成 hash;提交时也必须由**同一个域名发起请求**,否则服务端 session 存储的原始 hash 对不上。
本文共计857个文字,预计阅读时间需要4分钟。
直接原因很明确:
session.cookie_domain 配置必须显式匹配新域名
ThinkPHP 默认不干预 PHP 的 session 配置,它依赖底层 session_start() 的行为。一旦你把站点从 localhost 或 127.0.0.1 绑定到正式域名(比如 www.example.com),就必须手动设置 cookie 域名,否则浏览器不会把 session cookie 发给新域名。
- 在
config/session.php中添加或修改:'domain' => '.example.com'(注意开头的点,表示兼容子域名) - 如果只用主域名,不带子域,写成
'domain' => 'www.example.com'也可以,但更推荐前者 - 切勿留空或写成
localhost—— 这会导致新域名下 session 完全失效 - 改完后清掉浏览器所有该域名下的 Cookie,否则旧 cookie 仍会干扰
表单渲染和提交必须发生在同一域名上下文
很多人忽略一点:{:token()} 渲染时用的是当前请求的域名 + session ID 生成 hash;提交时也必须由**同一个域名发起请求**,否则服务端 session 存储的原始 hash 对不上。

