【问题标题】:CakePHP 4 csrfToken cookie not set on the first page loadCakePHP 4 csrfToken cookie未在第一页加载时设置
【发布时间】:2021-03-12 06:13:07
【问题描述】:

我正在使用 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 直接存放在 session 中。 你有解决我的问题的办法吗?

感谢您的帮助

最好的问候,

洛伊克

【问题讨论】:

    标签: php ajax cakephp csrf csrf-token


    【解决方案1】:

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

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

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

    另见

    【讨论】:

    • 感谢您的帮助,它可以工作,但是为什么在我的调试栏中,当我打开“请求”菜单时,我在属性列表中看不到“csrfToken”?
    • @LoickMEYER 我认为调试工具包不会显示除路由参数之外的任何属性。
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 2016-04-02
    • 2017-12-04
    • 1970-01-01
    相关资源
    最近更新 更多