【开发记录】Laravel 419 code The page has expired due to inactivity.

在使用post 提交form的时候报错。提示是 code 419 . 页面过期。查了许多资料,都讲述的是 CSRF 的问题。
一下是尝试解决过程

目录


出现的问题

这里写图片描述

CSRF 令牌问题

// 仔细检查了 表单的 CSRF 域
{!! csrf_field !!}

// 尝试更换为input
<input type="hidden" name="_token" value="{{ csrf_token() }}">

// 尝试增加页面头信息
<meta name="csrf-token" content="{{ csrf_token() }}">

// 尝试增加ajax 提交表单
<meta name="csrf-token" content="{{ csrf_token() }}" />

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

$("Form").submit(function(e){
     e.preventDefault();
     var data = $("Form").serialize();
     console.log(data);
     $.ajax({
         url: '{{ route('admin.dologin') }}',
         type: 'post',
         dataType: 'json',
         success: function (data) {
             console.log(data);
         }
     });
 });

以上解决方案不能解决我的问题,应该是对应解决的如图问题。

CSRF

Stack Overflow 解决方案

原文部分解决方案 ,应该是不同的人遇到该问题的不同解决方案。

第一种解决方案

有网友建议清除缓存。

composer dump-autoload
php artisan optimize
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

第二种解决方案

In my case, the site was fine in server but not in local. Then I remember I was working on secure website.
So in file config.session.php, set the variable secure to false
和服务器执行不一致,安全站点检测。这个是 session 的设置问题。

‘secure’ => env(‘SESSION_SECURE_COOKIE’, false),

第三种解决方案

部分人问题是没有写入权限的问题。

sudo chmod -R 775 storage/

问题的解决

借鉴并结合了Stack Overflow 的解决方案。


  1. 修改了文件夹的权限。
  2. 检查session 配置文件。
  3. 尝试清除缓存。

'domain' => env('SESSION_DOMAIN', '*.shop.com'),
// 还原修改为

'domain' => env('SESSION_DOMAIN', null),

之前为了尝试两个laravel session 共享的问题,这里都修改成了同一个值,未能同步。且造成了本文的问题。
现修改还原为最初的null
执行清除缓存命令。重新请求页面。

问题就此解决。

总结,出现同一个错误的情况下可能与别人的出错地方是不一样的。所以应该多掌握原理,知道过程都经过了哪里,找不出错误的情况下可以根据过程逐个排查。

猜你喜欢

转载自blog.csdn.net/cuiliwu/article/details/80477425
今日推荐