Trước khi đọc bên dưới, hãy đảm bảo rằng bạn có @csrf
hoặc {{ csrf_field() }}
ở dạng của bạn
như
<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>
Thông báo lỗi Đã hết hạn phiên hoặc 419 Trang đã hết hạn trong larvel xuất hiện do ở đâu đó xác minh mã thông báo csrf của bạn không thành công, có nghĩa là App\Http\Middleware\VerifyCsrfToken::class
phần mềm trung gian đã được bật. Dưới dạng @csrf
chỉ thị lưỡi dao đã được thêm vào, điều này cũng sẽ ổn.
Sau đó, khu vực khác để kiểm tra là phiên. Việc csrf
xác minh mã thông báo liên quan trực tiếp đến phiên của bạn, Vì vậy, bạn có thể muốn kiểm tra xem trình điều khiển phiên của mình có hoạt động hay không, chẳng hạn như Redis được định cấu hình không chính xác có thể gây ra sự cố.
Có thể bạn có thể thử chuyển đổi phần mềm / trình điều khiển phiên từ .env
tệp của mình , các trình điều khiển được hỗ trợ được cung cấp bên dưới
Trình điều khiển phiên được hỗ trợ trong Laravel 5, Laravel 6 và Laravel 7 (Liên kết tài liệu)
file
- phiên được lưu trữ trong bộ nhớ / khuôn khổ / phiên.
cookie
- phiên được lưu trữ trong cookie được mã hóa, an toàn.
database
- phiên được lưu trữ trong cơ sở dữ liệu quan hệ.
memcached
/ redis
- phiên được lưu trữ trong một trong những cửa hàng dựa trên bộ nhớ cache, nhanh.
array
- phiên được lưu trữ trong một mảng PHP và sẽ không tồn tại.
Nếu biểu mẫu của bạn hoạt động sau khi chuyển đổi trình điều khiển phiên, thì có điều gì đó không ổn với trình điều khiển cụ thể đó, hãy cố gắng sửa lỗi từ đó.
Các tình huống có thể xảy ra lỗi
Có thể các phiên dựa trên tệp có thể không hoạt động do các vấn đề về quyền với /storage
thư mục (một googling nhanh sẽ tìm cho bạn giải pháp), cũng nên nhớ đặt 777 cho thư mục không bao giờ là giải pháp.
Trong trường hợp của trình điều khiển cơ sở dữ liệu, kết nối DB của bạn có thể sai hoặc sessions
bảng có thể không tồn tại hoặc được định cấu hình sai (phần cấu hình sai đã được xác nhận là một vấn đề theo nhận xét của @Junaid Qadir).
redis/memcached
cấu hình sai hoặc đang bị thao tác bởi một số đoạn mã khác trong hệ thống cùng một lúc.
Có thể là một ý tưởng hay khi thực thi php artisan key:generate
và tạo một khóa ứng dụng mới, khóa này sẽ xóa dữ liệu phiên.
Xóa bộ nhớ cache của trình duyệt CỨNG , tôi thấy chrome và firefox là thủ phạm nhiều hơn tôi có thể nhớ.
Đọc thêm về lý do tại sao khóa ứng dụng lại quan trọng
return;
bạn có thể gọireturn redirect()->back();
. Từ những gì tôi có thể thấy, ứng dụng không có gì phải làm sau yêu cầu đăng. Có thể bạn có thể chuyển hướng nó đến một dạng xem sau khi xử lý yêu cầu.