在Laravel中发布请求-错误-419对不起,您的会话/419您的页面已过期 [英] Post request in Laravel - Error - 419 Sorry, your session/ 419 your page has expired
问题描述
我安装了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对不起,您的会话已过期.请刷新,然后重试.
在版本5.6
中,没有这样的问题.
在阅读以下内容之前,请确保您的表单中包含@csrf
或{{ csrf_field() }}
喜欢
<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>
在larvel中出现Session Expired或419 Page Expired错误消息,是因为您的csrf令牌验证失败的某处,这意味着App\Http\Middleware\VerifyCsrfToken::class
中间件已经打开. @csrf
Blade指令的形式已经添加,也应该没问题.
然后要检查的另一个区域是会话. csrf
令牌验证直接与您的会话有关,因此您可能要检查会话驱动程序是否正常工作,例如配置错误的Redis可能会引起问题.
也许您可以尝试从.env
文件切换会话驱动程序/软件,支持的驱动程序在下面给出
Laravel 5,Laravel 6和Laravel 7中受支持的会话驱动程序 ( Doc Link)
-
file
-会话存储在存储/框架/会话中. -
cookie
-会话存储在安全的加密cookie中. -
database
-会话存储在关系数据库中. -
memcached
/redis
-会话存储在这些基于高速缓存的快速存储区之一中. -
array
-会话存储在PHP数组中,不会持久保存.
如果在切换会话驱动程序后您的表单可以工作,则说明该特定驱动程序有问题,请尝试从此处修复错误.
可能的容易出错的情况
-
由于
/storage
目录的权限问题,可能基于文件的会话可能无法正常工作(快速搜索将为您带来解决方案),还请记住,将777用作目录绝不是解决方案.> -
对于数据库驱动程序,您的数据库连接可能错误,或者
sessions
表可能不存在或配置错误(根据@的注释,错误的配置部分被确认为问题. Junaid Qadir). -
redis/memcached
配置错误或同时被系统中其他一些代码操纵.
执行php artisan key:generate
并生成一个新的应用程序密钥可能是一个好主意,该应用程序密钥又将刷新会话数据.
清除浏览器缓存 HARD ,我发现chrome和firefox是我不记得的罪魁祸首.
I installed Laravel 5.7
Added a form to the file \resources\views\welcome.blade.php
<form method="POST" action="/foo" >
@csrf
<input type="text" name="name"/><br/>
<input type="submit" value="Add"/>
</form>
Added to file \routes\web.php
Route::post('/foo', function () {
echo 1;
return;
});
After sending a POST request:
419 Sorry, your session has expired. Please refresh and try again.
In version 5.6
there was no such a problem.
Before reading below make sure you have @csrf
or {{ csrf_field() }}
in your form
like
<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>
The Session Expired or 419 Page Expired error message in larvel comes up because somewhere your csrf token verification fails which means the App\Http\Middleware\VerifyCsrfToken::class
middleware is already turned on. In the form the @csrf
blade directive is already added, which should be fine as well.
Then the other area to check is the session. The csrf
token verification is directly involved with your session, So you might want to check whether your session driver is working or not, such as an incorrectly configured Redis might cause an issue.
Maybe you can try switching your session driver/software from your .env
file, the supported drivers are given below
Supported Session drivers in Laravel 5, Laravel 6 and Laravel 7 (Doc Link)
file
- sessions are stored in storage/framework/sessions.cookie
- sessions are stored in secure, encrypted cookies.database
- sessions are stored in a relational database.memcached
/redis
- sessions are stored in one of these fast, cache based stores.array
- sessions are stored in a PHP array and will not be persisted.
If your form works after switching the session driver, then something wrong is with that particular driver, try to fix the error from there.
Possible error-prone scenarios
Probably file-based sessions might not work because of the permission issues with the
/storage
directory (a quick googling will fetch you the solution), also remember putting 777 for the directory is never the solution.In the case of the database driver, your DB connection might be wrong, or the
sessions
table might not exist or wrongly configured (the wrong configuration part was confirmed to be an issue as per the comment by @Junaid Qadir).redis/memcached
configuration is wrong or is being manipulated by some other piece of code in the system at the same time.
It might be a good idea to execute php artisan key:generate
and generate a new app key which will, in turn, flush the session data.
Clear Browser Cache HARD, I found chrome and firefox being a culprit more than I can remember.
Read more about why application keys are important
这篇关于在Laravel中发布请求-错误-419对不起,您的会话/419您的页面已过期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!