在 Laravel 中进行 POST 请求 - 错误 - 419 对不起,您的会话/ 419 您的页面已过期。
在 Laravel 中进行 POST 请求 - 错误 - 419 对不起,您的会话/ 419 您的页面已过期。
我安装了 Laravel 5.7
在文件 \\resources\\views\\welcome.blade.php
中添加了一个表单
添加到文件 \\routes\\web.php
中
Route::post('/foo', function () { echo 1; return; });
发送 POST 请求后:
419 抱歉,您的会话已过期,请刷新并重试。
在版本 5.6
中没有这样的问题。
在阅读以下内容之前,请确保您的表单中有@csrf
或{{ csrf_field() }}
,如
在Laravel中,会出现会话已过期或419页已过期的错误消息,因为您的csrf令牌验证失败,这意味着App\Http\Middleware\VerifyCsrfToken::class
中间件已经启用。在表单中已添加@csrf
blade指令,这应该也没问题。
然后,您需要检查的另一个区域是会话。csrf
令牌验证直接涉及您的会话,所以您可能要检查您的会话是否工作,比如错误配置的Redis会导致问题。
也许您可以尝试从您的.env
文件中切换您的会话驱动程序/软件,支持的驱动程序如下:
Laravel 5、Laravel 6和Laravel 7支持的会话驱动程序(文档链接)
file
- 会话存储在storage/framework/sessions。cookie
- 会话存储在安全的加密cookie中。database
- 会话存储在关系型数据库中。memcached
/redis
- 会话存储在这些快速高速缓存存储中之一中。array
- 会话存储在PHP数组中,不会持久化。
如果在切换会话驱动程序后您的表单可以工作,则某个特定驱动程序存在问题,请尝试从那里修复错误。
可能出现错误的情况
-
可能由于
/storage
目录的权限问题,基于文件的会话可能无法工作(快速搜索可获得解决方案),还请记住,将目录设置为777并不是解决方案。 -
在数据库驱动程序的情况下,您的数据库连接可能有问题,或者
sessions
表可能不存在或错误配置(据@Junaid Qadir的评论证实,错误配置部分是一个问题)。 -
redis/memcached
配置有误或正在同一时间受到系统中某个其他代码的操作。
执行php artisan key:generate
并生成新的应用程序密钥可能是一个好主意,这将清除会话数据。
清除浏览器缓存+强制刷新,我发现Chrome和Firefox经常是罪魁祸首。