在使用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);
}
});
});
以上解决方案不能解决我的问题,应该是对应解决的如图问题。
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 的解决方案。
- 修改了文件夹的权限。
- 检查session 配置文件。
- 尝试清除缓存。
'domain' => env('SESSION_DOMAIN', '*.shop.com'),
// 还原修改为
'domain' => env('SESSION_DOMAIN', null),
之前为了尝试两个laravel session 共享的问题,这里都修改成了同一个值,未能同步。且造成了本文的问题。
现修改还原为最初的null
执行清除缓存命令。重新请求页面。
问题就此解决。
总结,出现同一个错误的情况下可能与别人的出错地方是不一样的。所以应该多掌握原理,知道过程都经过了哪里,找不出错误的情况下可以根据过程逐个排查。