Yii2 Csrf on 关闭 cookies

Yii2 Csrf on turned off cookies

我对 Yii2 上的 AJAX 请求进行 crsf 验证时遇到问题。 配置文件中允许使用 Crsf

 'request'=>array(
        'enableCsrfValidation'=>true,
        'enableCookieValidation'=>true,
    ),

我在主应用程序布局中有这一行

<?= Html::csrfMetaTags() ?>

开启cookies后一切正常。另外 http header 有一个 X-CSRF-Token, 值不同于 cookie 的 _crsf 参数。 当我尝试在我的本地主机上禁用 cookie(为 nocookie 用户测试网站)时,ajax 请求无法正常工作。 (错误 400 错误请求)。 在 http 请求 headers 我看到这一行

X-CSRF-Token:"U05vc3J6YmVmPgAaFh8gAiMvPBQTETMrBjc8JRA4GywBBwMGAzA7Og=="

我在 html 页面的元参数中看到相同的值(对于 cookie 请求也是如此)。

Ajax 请求看起来像这样。我尝试将 crsf 值添加到 headers 和 http 参数,但没有效果。我也没有 beforeAction() 方法

   var noCookieResp = $.ajax({
        //beforeSend: function(request){
        //    request.setRequestHeader("X-CSRF-Token", $('meta[name="csrf-token"]').attr("content"));
        //},
        type: 'POST',
        url: window.location.origin + '/frontend/web/viewer/noc',
        data: {
            id: postId,
            _csrf : yii.getCsrfToken()
        },
        error: function(e) {
            console.log(e);
        },
        success: function(){
            console.log(noCookieResp.responseText);
        }
    });

有什么建议吗?对不起英语不好

在大多数情况下,当用户因未登录而禁用 cookie 时,我们不需要 csrf_token。因此,您可以在允许访客访问的某些操作或控制器中禁用 csrf。

public function beforeAction($action) {
     $this->enableCsrfValidation = false;
     return parent::beforeAction($action);
}