问题描述
我使用的是 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')
另见