Php 在laravel中使用AJAX防止令牌不匹配异常的方法

Php 在laravel中使用AJAX防止令牌不匹配异常的方法,php,laravel,laravel-5.2,laravel-5.1,laravel-5.3,Php,Laravel,Laravel 5.2,Laravel 5.1,Laravel 5.3,我分析过,得到令牌不匹配错误的比率非常高。这个错误是因为一些愚蠢的错误。开发人员犯错误的原因有很多。下面是一些例子 不发送头上的令牌 使用ajax时不发送数据上的令牌 在存储路径上没有权限 无效的会话存储路径 还有许多其他原因,请随意编辑此问题,了解更多防止此类错误的方法。可能的更改-1 头上的设置令牌 在default.blade.php视图的上设置令牌 <meta name="csrf-token" content="{{csrf_token()}}"> 在标签上设置令牌 将

我分析过,得到令牌不匹配错误的比率非常高。这个错误是因为一些愚蠢的错误。开发人员犯错误的原因有很多。下面是一些例子

  • 不发送头上的令牌
  • 使用ajax时不发送数据上的令牌
  • 在存储路径上没有权限
  • 无效的会话存储路径

  • 还有许多其他原因,请随意编辑此问题,了解更多防止此类错误的方法。

    可能的更改-1

    头上的设置令牌

    default.blade.php
    视图的
    上设置令牌

    <meta name="csrf-token" content="{{csrf_token()}}">
    

    标签上设置令牌

    将下面的函数添加到您的
    标记中。此函数将生成名为
    \u token
    的隐藏字段,并用token填充值

    {{csrf_field()}}
    
    csrf\u token()
    函数添加到值属性中隐藏的
    \u token
    。这将只生成加密字符串


    可能的变化-2

    检查会话存储路径和权限

    这里假设项目app url是
    app\u url=http://project.dev/ts/toys-store

  • 将写入权限设置为
    存储路径('framework/sessions')
  • 检查您的laravel项目的路径
    'path'=>'/ts/toys store',
    此路径是您的laravel项目的根
  • 更改cookie的名称
    “cookie”=>“玩具店”

    return [
        'driver' => env('SESSION_DRIVER', 'file'),
        'lifetime' => 120,
        'expire_on_close' => false,
        'encrypt' => false,
        'files' => storage_path('framework/sessions'),
        'connection' => null,
        'table' => 'sessions',
        'lottery' => [2, 100],
        'cookie' => 'toys-store',
        'path' => '/ts/toys-store',
        'domain' => null,
        'secure' => false,
        'http_only' => true,
    ];
    

  • 可能的变化-3

    在AJAX上使用
    \u令牌
    字段

    在AJAX调用中发送
    \u令牌
    的方法有很多

  • 使用
    var formData=new formData($(“#购物车添加”)[0]),获取
    标记中所有输入字段的值
  • 使用
    $(“#购物车添加”).serialize()
    $(“#购物车添加”).serializeArray()
  • 在AJAX的数据上手动添加
    \u令牌
    。使用
    $('meta[name=“csrf-token”]').attr('content')
    $('input[name=“\u-token”]').val()
  • 我们可以在特定的ajax调用上设置为header,如下代码所示

    $.ajax({
        url: "path/to/ajax",
        type: "POST",
        data: formData,
        processData: false,
        contentType: false,
        dataType: "json",
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    

  • 可能的变化-1

    头上的设置令牌

    default.blade.php
    视图的
    上设置令牌

    <meta name="csrf-token" content="{{csrf_token()}}">
    

    标签上设置令牌

    将下面的函数添加到您的
    标记中。此函数将生成名为
    \u token
    的隐藏字段,并用token填充值

    {{csrf_field()}}
    
    csrf\u token()
    函数添加到值属性中隐藏的
    \u token
    。这将只生成加密字符串


    可能的变化-2

    检查会话存储路径和权限

    这里假设项目app url是
    app\u url=http://project.dev/ts/toys-store

  • 将写入权限设置为
    存储路径('framework/sessions')
  • 检查您的laravel项目的路径
    'path'=>'/ts/toys store',
    此路径是您的laravel项目的根
  • 更改cookie的名称
    “cookie”=>“玩具店”

    return [
        'driver' => env('SESSION_DRIVER', 'file'),
        'lifetime' => 120,
        'expire_on_close' => false,
        'encrypt' => false,
        'files' => storage_path('framework/sessions'),
        'connection' => null,
        'table' => 'sessions',
        'lottery' => [2, 100],
        'cookie' => 'toys-store',
        'path' => '/ts/toys-store',
        'domain' => null,
        'secure' => false,
        'http_only' => true,
    ];
    

  • 可能的变化-3

    在AJAX上使用
    \u令牌
    字段

    在AJAX调用中发送
    \u令牌
    的方法有很多

  • 使用
    var formData=new formData($(“#购物车添加”)[0]),获取
    标记中所有输入字段的值
  • 使用
    $(“#购物车添加”).serialize()
    $(“#购物车添加”).serializeArray()
  • 在AJAX的数据上手动添加
    \u令牌
    。使用
    $('meta[name=“csrf-token”]').attr('content')
    $('input[name=“\u-token”]').val()
  • 我们可以在特定的ajax调用上设置为header,如下代码所示

    $.ajax({
        url: "path/to/ajax",
        type: "POST",
        data: formData,
        processData: false,
        contentType: false,
        dataType: "json",
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    

  • 你有答案吗?这是我对我问题的答案。这些都是防止令牌不匹配的方法,例外你们有答案吗?这是我对我的问题的答案。这些是防止令牌不匹配异常的方法