CakePHP 4 csrfToken cookie 未在第一页加载时设置
CakePHP 4 csrfToken cookie not set on the first page load
我正在使用 cakePHP 4.2.3
在我的主页上,我有一个表单,我想用 ajax 提交这个表单,使用 cakePHP,我们必须在 AJAX 的 header 中指定请求 "X-CSRF-Token"
和要得到这个,我必须这样做:
var csrfToken = <?= json_encode($this->request->getCookie('csrfToken')) ?>;
这个工作很好,但是在第一个页面加载时,我无法访问 csrfToken cookie,我必须再次刷新页面才能访问 cookie。
因此,如果访问者刚刚到达我的网站而之前没有访问过其他页面,我的 AJAX 请求将无法发送。
我知道在cakePHP 3.X 中,csrfToken 直接存储在session 中。
你有办法解决我的问题吗?
感谢您的帮助
此致,
洛伊克
如果有的话,您将从 response cookie 中读取值,即您的应用程序设置的 cookie,而不是从 请求中读取值 cookie,即用户发送给您的应用程序的cookie。
然而,在您的应用程序中,您最好保持不可知论,并按照文档中所示进行操作,从您的应用程序设置的 csrfToken
请求属性中读取令牌:
$this->request->getAttribute('csrfToken')
另见
我正在使用 cakePHP 4.2.3
在我的主页上,我有一个表单,我想用 ajax 提交这个表单,使用 cakePHP,我们必须在 AJAX 的 header 中指定请求 "X-CSRF-Token"
和要得到这个,我必须这样做:
var csrfToken = <?= json_encode($this->request->getCookie('csrfToken')) ?>;
这个工作很好,但是在第一个页面加载时,我无法访问 csrfToken cookie,我必须再次刷新页面才能访问 cookie。
因此,如果访问者刚刚到达我的网站而之前没有访问过其他页面,我的 AJAX 请求将无法发送。
我知道在cakePHP 3.X 中,csrfToken 直接存储在session 中。 你有办法解决我的问题吗?
感谢您的帮助
此致,
洛伊克
如果有的话,您将从 response cookie 中读取值,即您的应用程序设置的 cookie,而不是从 请求中读取值 cookie,即用户发送给您的应用程序的cookie。
然而,在您的应用程序中,您最好保持不可知论,并按照文档中所示进行操作,从您的应用程序设置的 csrfToken
请求属性中读取令牌:
$this->request->getAttribute('csrfToken')
另见