zoukankan      html  css  js  c++  java
  • 解决YII提交POST表单出现400错误,以及ajax post请求时出现400问题

    POST表单400错误:

    正确做法:

     Add this in the head section of your layout:

      <?= Html::csrfMetaTags() ?>

    --------------------------------- 

    不推荐的做法,以下做法是取消CSRF令牌验证:

    Add this in your controller:

    public $enableCsrfValidation = false;

    别的方法:

    原来是csrf验证的问题,因为表单是自己写的,在Yii框架中,为了防止csrf攻击,对post的表单数据封装了CSRF令牌验证。
    解决办法关闭csrf验证
    方法一、在配资文件中关闭

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

    使用Yii表单生成页面的时候,如果表单的提交方式为POST,是都会在页面中添加一个隐藏字段,这个隐藏字段就是CSRF令牌验证字段
    用户在提交表单的同时,将该字段提交给服务器端,Yii框架会将该有客户端提交过来的隐藏字段和客户端提交过来的Cookie中的YII_CSRF_TOKEN值进行比较。
    相同则通过继续执行,不相同则会抛出400异常:"The CSRF token could not be verified."。
    所以就出现了上面的问题,如果是自己写的表单,可以在视图页面的表单添加隐藏的令牌验证字段
    方法二、在表单中增加隐藏的验证字段

    <input name="_csrf" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>">

    如果不想csrf验证就将方法一的true修改为false,这样YII就不会做post表单验证处理。

    Ajax POST 的400错误:

      最近在做看电影啦 的时候也要用到ajax post。所以又在网上寻找答案。终于,无意之中在Yii from找到这个答案()YII_CSRF_TOKEN 这个东西,因为我开启了 enableCsrfValidation’=>true  ,所以在进行请求的时候会加上csrf的验证。所以在ajax 进行ajax post请求的时候就无法通过验证了。

    解决办法: 只要请求的时候手动加上 YII_CSRF_TOKEN 就行了!

    例如:

    //发送ajax $.ajax({ type: "post", dataType: 'json', url: "index.php?r=Movie/InsertFavorite", data:{'movie_id':'<?php echo $_GET['id']?>','YII_CSRF_TOKEN':'<?php echo ii::app()->request->csrfToken>'}, cache: false, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown); }, success:function(data){ var result=eval("("+data+")"); alert(data) }, }); 

  • 相关阅读:
    Ubuntu 11.10版本下的软件中心安装软件的默认路径
    C++中构造函数调用与申明方式的关系
    VMware Workstation 虚拟机(客户机)创建和主机共享文件夹
    观察者模式——三英雄战吕布
    如何在yarn上运行Hello World(二)
    Cat 客户端如何构建调用链消息树
    Cat 跨线程之 TaggedTransaction 用法和原理分析
    Cat 客户端采用什么策略上报消息树
    Cat 跨线程之 ForkedTransaction 用法和原理分析
    jest for elasticsearch
  • 原文地址:https://www.cnblogs.com/webStyle/p/5179340.html
Copyright © 2011-2022 走看看