2016-07-17 15:32:05 2183次浏览 3条回答 1 悬赏 20 金钱

每次退出的时候,时不时的出现“Bad Request (#400) 您提交的数据无法被验证。”,但是刷新一下就好了,搞不清是哪里有问题,希望有高人能提个醒

最佳答案

  • 终身孤寂 发布于 2016-07-18 17:56 举报

    如果你直接用F5刷新应该也是会报错,初步判断是因为 _csrf 验证的问题,这个是为了防止攻击设置的令牌。
    在配置里面

    'components'=>array(
        'request'=>array(
            // Enable Yii Validate CSRF Token
            'enableCsrfValidation' => true,
        ),
    ), 
    

    就开启了。然后POST 请求的时候就会验证你的 _csrf。
    如果你用组件的话,默认是有这个的,不需要你做处理,如果是你自己写的表单,就需要在form 里面加上这个字段,如下:
    <input type="hidden" value="<?php echo Yii::app()->getRequest()->getCsrfToken(); ?>" name="YII_CSRF_TOKEN" />

    5 条回复
    回复于 2016-07-18 18:00 回复

    在下面~ 第一次用,代码没弄全

    回复于 2016-07-19 10:40 回复

    用这个验证有什么用处?就是防止攻击吗?我所说的这个错误是时不时出来的,在本地调试的时候也会出现,应该不是攻击所致,有没有其他的设想了?

    回复于 2016-07-19 14:39 回复

    这句错误是提示你请求的数据没有得到验证,初步判断是你没有把令牌(_csrf)加到表单里面。我看你不知道它是什么东西所以告诉你是为了防止攻击的一个玩意,就好比你的QQ令牌,你不用令牌肯定提示你 “请输入令牌”,你不能说提醒你就代表你在攻击腾讯把...... 至于你这个错误时不时得出来,我猜是你在未加入令牌的表单提交的时候报的错。

    回复于 2016-07-19 14:49 回复

    虽然我还没调试好,不过还是不胜感激

    回复于 2016-07-19 14:58 回复

    你在报错的控制器里面加上 public $enableCsrfValidation = false;试试。 或者把我上面给你发那一句加到表单里试试!

您需要登录后才可以回答。登录 | 立即注册
drykiss
副总裁

drykiss

注册时间:2015-10-20
最后登录:2018-05-04
在线时长:51小时27分
  • 粉丝6
  • 金钱4520
  • 威望0
  • 积分5030

热门问题