我安装了 Laravel 5.7
向文件\resources\views\welcome.blade.php
<form method="POST" action="/foo" >
@csrf
<input type="text" name="name"/><br/>
<input type="submit" value="Add"/>
</form>
添加到文件\routes\web.php
Route::post('/foo', function () {
echo 1;
return;
});
发送 POST 请求后:
419 Sorry, your session has expired. Please refresh and try again.
5.6
版本没有这个问题。
最佳答案
在阅读以下内容之前,请确保您的表单中有 @csrf
或 {{ csrf_field() }}
喜欢
<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>
Laravel 中出现 Session Expired 或 419 Page Expired 错误消息是因为您的 csrf token 验证失败,这意味着 App\Http\Middleware\VerifyCsrfToken::class
中间件已经打开。在表单中已经添加了 @csrf
Blade 指令,这也应该没问题。
然后要检查的另一个区域是 session 。 csrf
token 验证直接与您的 session 相关,因此您可能需要检查您的 session 驱动程序是否正常工作,例如配置不正确的 Redis 可能会导致问题。
也许您可以尝试从 .env
文件切换 session 驱动程序/软件,支持的驱动程序如下所示
Laravel 5、Laravel 6 和 Laravel 7 支持的 Session 驱动程序 (Doc Link)
file
- session 存储在 storage/framework/sessions 中。cookie
- session 存储在安全、加密的 cookie 中。database
- session 存储在关系数据库中。memcached
/redis
- session 存储在这些基于缓存的快速存储之一中。array
- session 存储在 PHP 数组中,不会被持久化。
如果您的表单在切换 session 驱动程序后工作正常,那么该特定驱动程序有问题,请尝试从那里修复错误。
可能容易出错的情况
可能由于
/storage
目录的权限问题,基于文件的 session 可能无法工作(快速谷歌搜索将获取解决方案),还记得将 777 作为目录永远没有解决方案。在数据库驱动的情况下,你的数据库连接可能是错误的,或者
sessions
表可能不存在或配置错误(错误的配置部分被确认为问题为根据@Junaid Qadir 的评论)。redis/memcached
配置错误或同时被系统中的其他一些代码操作。
执行 php artisan key:generate
并生成一个新的应用程序 key 可能是个好主意,这反过来会刷新 session 数据。
清除浏览器缓存HARD,我发现 Chrome 和 Firefox 是罪魁祸首。
关于php - 在 Laravel 中发布请求 - 错误 - 419 抱歉,您的 session /419 您的页面已过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52583886/