CakePHP 4 csrfToken cookie 未在第一页加载时设置

问题描述

我使用的是 cakePHP 4.2.3 在我的主页上,我有一个表单,我想用 ajax 提交这个表单,用 cakePHP,我们必须在 AJAX 请求的标头中指定 "X-CSRF-Token" 并获得这个,我必须这样做:

var csrftoken = <?= json_encode($this->request->getCookie('csrftoken')) ?>;

这个工作很好,但是在第一次加载页面时,我无法访问csrftoken cookie,我必须再次刷新页面才能访问cookie。

因此,如果访问者之前没有访问过其他页面,则访问者刚刚到达我的网站,则无法发送我的 AJAX 请求。

我知道在 cakePHP 3.X 中 csrftoken 直接存放在会话中。 你有解决我的问题的方法吗?

感谢您的帮助

最好的问候,

逻辑

解决方法

如果有的话,您将从 response cookie 中读取值,该 cookie 是您的应用程序设置的 cookie,而不是从 request cookie,后者是用户发送到您的应用程序的 cookie。

但是,在您的应用程序中,您最好保持不可知,并按照文档中所示进行操作,从您的应用程序设置的 csrfToken 请求属性中读取令牌:

$this->request->getAttribute('csrfToken')

另见