为什么无法在Yii2中验证您的数据提交错误?

Bha*_*han 33 yii2

在此输入图像描述

错误:

无法验证您的数据提交错误

在Yii2中创建一个公共函数.但是,在此方法中提交数据不接受,请参阅以下错误图像.为什么会这样?

dch*_*rov 45

如果手动创建表单(即不使用yii表单方法),则应添加如下输入字段:

<input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" />
Run Code Online (Sandbox Code Playgroud)

来源:http://zero-exception.blogspot.com/2015/01/yii2-using-csrf-token.html

  • 当然,我想有很多手动创建表单的人-thx =) (2认同)

小智 20

将其添加到布局的head部分: <?= Html::csrfMetaTags() ?>

  • 我已经添加了元标记,但仍然是同样的错误. (3认同)
  • 如果我不使用 Yii 布局怎么办?我正在使用有角度的“$http.put()”,并且在我的控制器中我有“public $enableCsrfValidation = false;”,这可以工作,但听起来不太好。 (2认同)

Amo*_*gei 14

这个问题有各种解决方案,我想首先理解它为什么会有所帮助解决问题.

  1. 它由无效的csrf令牌,用户生成的csrf令牌,过期的csrf令牌引起,当您使用不使用'ActiveForm'类构建的自定义表单时,将出现所有这些'csrf'问题.

如果CSRF不是问题,

  1. 当您尝试上载多个文件并且Web服务器无法处理负载时,会发生其他原因.检查此项以确保您处于正确轨道的某些属性是确定正在尝试上载的文件的大小并检查Web服务器的post_max_size和upload_max_filesize

如果您正在运行linux,请检查php.ini文件以获取以下输入:

; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data    reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 8M

; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M
Run Code Online (Sandbox Code Playgroud)

根据您的计算,调整上面的php.ini参数以满足您的需求,然后进行测试.我有类似的问题,我解决了它.


小智 7

要在整个应用程序中永久禁用 csrf 验证,请在您的配置中添加以下代码。

$config = [
    'components' => [
        'request' => [
            'enableCsrfValidation' => false,
        ],
    ],
];
Run Code Online (Sandbox Code Playgroud)

  • 为什么要在可公开访问的 Web 应用程序中禁用 csrf 令牌验证? (7认同)