Laravel 5.7을 설치했습니다.
파일에 양식을 추가했습니다.resourcesviewswelcome.blade.php
<form method="POST" action="/foo" >
@csrf
<input type="text" name="name"/><br/>
<input type="submit" value="Add"/> </form>
파일에 추가됨routesweb.php
Route::post('/foo', function () {
echo 1;
return; });
POST 요청 전송 후:
419 죄송합니다. 세션이 만료되었습니다.새로 고친 후 다시 시도하십시오.
버전 내5.6
그런 문제는 없었습니다.
질문에 대한 답변
아래를 읽기 전에 다음과 같은 상태가 있는지 확인하십시오.
<form method="post"> @csrf <!-- {{ csrf_field() }} --> ... rest of form ... </form>
Larabel의 Session Expired or 419 Page Expired 오류 메시지가 뜨는 이유는 어딘가에서 CSRF 토큰 검증이 실패했기 때문입니다.즉, 이 메시지는AppHttpMiddlewareVerifyCsrfToken::class
미들웨어가 이미 켜져 있습니다.폼에서@csrf
블레이드 디렉티브는 이미 추가되어 있습니다.이것도 괜찮습니다.
다음으로 체크해야 할 영역은 세션입니다.그csrf
토큰 검증은 세션과 직접 관련되어 있기 때문에 세션드라이버가 동작하고 있는지 여부를 확인하는 것이 좋습니다.예를 들어 Redis 설정이 잘못되어 있으면 문제가 발생할 수 있습니다.
세션 드라이버/소프트웨어를 에서 전환해 볼 수 있습니다..env
파일. 지원되는 드라이버는 다음과 같습니다.
Larabel 5, Larabel 6 및 Larabel 7에서 지원되는 세션 드라이버 (문서 링크)
file
– 세션은 스토리지/하드웨어/하드웨어에 저장됩니다.cookie
세션은 암호화된 안전한 쿠키에 저장됩니다.database
세션은 관계형 데이터베이스에 저장됩니다.memcached
/redis
세션은 고속 캐시 기반 저장소 중 하나에 저장됩니다.array
세션은 PHP 배열에 저장되며 지속되지 않습니다.
세션 드라이버를 전환한 후에 폼이 동작하는 경우는, 그 드라이버에 문제가 있는 경우는, 거기서 에러를 수정해 주세요.
오류 발생 가능성이 있는 시나리오
아마도 파일 기반 세션이 동작하지 않을 수 있습니다.이는 의 권한 문제 때문입니다.
/storage
directory(빠른 구글 검색으로 솔루션을 얻을 수 있습니다).또한 디렉토리에 777을 입력하는 것은 결코 해결책이 되지 않는다는 것을 기억하십시오.데이터베이스 드라이버의 경우 DB 연결이 잘못되었거나
sessions
테이블이 존재하지 않거나 잘못 설정되어 있을 수 있습니다(@Junaid Qadir의 코멘트에 의하면, 잘못된 설정 부분이 문제인 것이 확인되었습니다).redis/memcached
설정이 잘못되었거나 동시에 시스템 내의 다른 코드에 의해 조작되고 있습니다.
실행하는 것이 좋을지도 모릅니다.php artisan key:generate
새 앱 키를 생성하면 세션 데이터가 플러시됩니다.
브라우저 캐시 삭제 HARD. Chrome과 Firefox가 내가 기억하는 것보다 더 많은 원인이라는 것을 알았다.
응용 프로그램 키가 중요한 이유에 대해 자세히 알아보기
이는 폼에 CSRF가 필요하기 때문입니다.버전 5.7에서는 @csrf로 변경되었습니다.
<form action="" method="post">
@csrf
...
참조: https://laravel.com/docs/5.7/csrf
케이스 1 : 127.0.01:8000과 같은 로컬시스템에서 프로젝트를 실행하고 있는 경우,
그리고나서
더하다SESSION_DOMAIN=
.env 파일에서
또는 설정/컨피규레이션에 있습니다.php'domain' => env('SESSION_DOMAIN', ''),
그리고 나서 달려라php artisan cache:clear
케이스 2: 프로젝트가 서버에서 실행되고 있으며 “mydomain.com”과 같은 도메인이 있는 경우
더하다SESSION_DOMAIN=mydomain.com
.env 파일에서
또는 설정/컨피규레이션에 있습니다.php'domain' => env('SESSION_DOMAIN', 'mydomain.com'),
그리고 나서 달려라php artisan cache:clear
를 사용하는 것은 어떻습니까?
{{ csrf_field() }}
대신@csrf
419 에러는 대부분 CSRF 토큰의 문제 때문입니다.
저는 Larabel 5.7을 사용하고 있습니다.같은 문제가 있었습니다.그것은 CSRF 토큰이 폼에 없었기 때문입니다.
@csrf
문제를 해결하다