Larabel에 투고 요청 – 오류 – 419 죄송합니다.세션/ 419 페이지가 만료되었습니다.

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 배열에 저장되며 지속되지 않습니다.

세션 드라이버를 전환한 후에 폼이 동작하는 경우는, 그 드라이버에 문제가 있는 경우는, 거기서 에러를 수정해 주세요.

오류 발생 가능성이 있는 시나리오

  • 아마도 파일 기반 세션이 동작하지 않을 수 있습니다.이는 의 권한 문제 때문입니다./storagedirectory(빠른 구글 검색으로 솔루션을 얻을 수 있습니다).또한 디렉토리에 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 

문제를 해결하다