programing tip

laravel 5.5 비활성으로 인해 페이지가 만료되었습니다.

itbloger 2020. 12. 6. 21:16
반응형

laravel 5.5 비활성으로 인해 페이지가 만료되었습니다. 새로 고침하고 다시 시도하세요.


저는 Laravel을 처음 접했고 이해하지 못하는 문제가 있습니다. 내 프로젝트에 로그 양식이 있고 내 방법은 POST 입니다. 요청을 시도하면 결과는 다음과 같습니다.

'비 활동으로 인해 페이지가 만료되었습니다. 새로 고침하고 다시 시도하세요. '

그러나 방법을 GET으로 변경하면 제대로 작동합니다.

누군가가 그 이유와 해결 방법을 말해 줄 수 있습니까? 물론 POST 방법이 필요하기 때문입니다.


이 문제는 실패한 CSRF 토큰 검증에서 비롯됩니다. 그래서 당신은 하나를 게시하지 않거나 잘못된 것을 게시하고 있습니다.

GET에서 작동하는 이유는 Laravel의 GET 경로에 대해 게시 된 CSRF 토큰이 없기 때문입니다.

다음을 호출하여 양식에 CSRF 토큰을 게시 할 수 있습니다.

{{ csrf_field() }}

또는 다음에서 경로를 제외합니다 (보안 상 권장되지 않음) app/Http/Middleware/VerifyCsrfToken.php.

protected $except = [
    'your/route'
];

제 경우에는 동일한 오류 메시지가 표시되고 csrf_token양식 필드 에 추가하지 못한 것을 알았습니다 . 그런 다음 csrf_token.

양식 도우미를 사용하여

{{ csrf_field() }}

또는 양식 도우미 없이는

<input type="hidden" name="_token" value="{{ csrf_token() }}">

그래도 작동하지 않으면

브라우저 캐시 새로 고침

이제 작동 할 수 있습니다. 감사합니다.

Laravel 5.6 업데이트

라 라벨 @csrf{{ csrf_field() }}. 이제 더 좋아 보입니다.

<form action="">
   @csrf
   ...
</form>

애플리케이션에서 HTML 양식을 정의 할 때마다 양식에 숨겨진 CSRF 토큰 필드를 포함하여 CSRF 보호 미들웨어가 요청을 검증 할 수 있도록해야합니다. csrf_field도우미를 사용하여 토큰 필드를 생성 할 수 있습니다 .

<form method="POST" action="/profile">
    {{ csrf_field() }}
    ...
</form>

작동하지 않습니다. 그런 다음 브라우저 캐시를 새로 고침하면 작동 할 수 있습니다.

자세한 내용은 링크 열기 : -Laravel 5.5의 CSRF 보호

최신 정보:

Blades 템플릿을 사용하는 Laravel 5.6에서는 매우 쉽습니다.

<form method="POST" action="/profile">
    @csrf
    ...
</form>

자세한 내용은 링크 열기 : -Laravel 5.6의 CSRF 보호


이것은 Laravel 설치에서 기본 CSRV 미들웨어를 사용하고 있기 때문에 발생합니다. 해결하려면 Kernel.php에서 다음 줄을 제거하십시오.

\App\Http\Middleware\VerifyCsrfToken::class,

API를 빌드하는 경우 괜찮습니다. 그러나 웹 사이트를 구축하는 경우 이것은 보안 확인이므로 위험에 유의하십시오.


config / session.php 파일에이 줄이 있는지 확인하십시오.

'domain' => env('SESSION_DOMAIN', null),

그런 다음 SESSION_DOMAIN.env 파일에서 줄을 제거 하십시오.


나는 같은 문제가 있었다. 크롬에서 '인터넷 사용 기록 삭제'를 사용하세요. 문제를 해결할 수도 있습니다.


제 경우에는 ob_start (); 서버의 index.php 상단에 모든 것이 잘 작동하는 것 같습니다.


장소 {{csrf_field()}}당신의 속으로 form태그

여기에 이미지 설명 입력


성공하지 못한 채 몇 주 동안 문제를 해결하기 위해 다양한 솔루션을 시도했습니다.

내가 직면 한 문제는 laravel 5.0에서 5.5로 업그레이드하여 config / session.php를 업데이트하는 것을 잊었습니다.

누구든지 문제에 직면하면 실행중인 Laravel의 버전과 일치하도록 config / session.php를 업데이트하십시오.


먼저 양식에 csrf를 포함하십시오.

{{ csrf_field() }}

문제가 해결되지 않으면 ob_start();index.php의 맨 처음에 사용 하십시오.

<?php ob_start();

이 코드를 양식 안에 넣으십시오.

<input type = "hidden" name = "_token" value = "<?php echo csrf_token() ?>" />

동일한 오류가 발생하여 .env 파일에서이 줄을 제거했습니다.

SESSION_DRIVER = yourwebsite.com


구성이 설정되어있는 경우 : SESSION_DRIVER = file 세션 디렉토리가 쓰기 가능한지 확인해야합니다. 스토리지 / 프레임 워크 / 세션 확인


여전히이 문제가있는 사람은 다음과 같이 양식 내에서 다음 코드를 사용하십시오.

 echo '<input type = "hidden" name = "_token" value = "'. csrf_token().'" >';

양식에 CSRF 토큰이미 포함시킨 경우 . 그런 다음 양식의 캐시 데이터로 인해 오류 페이지가 표시됩니다.

터미널 / 명령 프롬프트를 열고 프로젝트 루트에서이 명령을 실행합니다.

  1. php artisan cache:clear
  2. php artisan config:clear
  3. php artisan route:clear
  4. php artisan view:clear,

또한 이러한 명령을 실행 하면서 브라우저 캐시지우십시오 .


나는 같은 문제가 있었고 많은 해결책을 시도했습니다. 그러나 아무도 나를 위해 일하지 않았습니다. 그런 다음 어떤 이유로 .env 파일에서 이것을 사용하고 있음을 알았습니다.

SESSION_DOMAIN = myapp.me

다시 null로 되 돌리 자마자 모든 것이 잘 작동했습니다.


내 경우에는 >숨겨진 입력 필드 끝에 추가하는 것을 잊었 기 때문에 동일한 문제가 발생했습니다 .<input type="hidden" name="_token" value="{{ Session::token() }}"

그래서 그것을 추가하여 수정했습니다.

<input type="hidden" name="_token" value="{{ Session::token() }}">

재미 있지만 저에게는 효과가 있습니다. 나는 이것이 laravel 코드의 기본 HTML TAG 때문에 발생한다는 것을 깨달았습니다. 대신 / * * / 또는 {{--}} 사용

또는 코드에서 최근 Html Coment를 제거하십시오 ... 또는 Html Comment를 Php Comment로 변경하십시오 ... 또는 php artisan clean browser와 같은 Worng artisan 명령을 실행하고 오류와 함께 HTML 주석 데이터가 출력되는지 확인하십시오. ..


Auth :: routes ()를 사용하는 대신 Router.php에서 경로를 복사하여 작동 합니다. 다음은 필요한 경로입니다.

Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register');

// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');

이 질문에 만족스럽게 대답 한 것을 알고 있지만 제 경우에 효과가있는 수정 사항을 언급하고 싶습니다. 추가 {{ csrf_field() }}했지만 여전히 작동하지 않았습니다.

Then I remembered that I blocked all cookies for development purposes, which can be nice when you change the page and want to refresh it.

Once I changed the settings to stop blocking all cookies in MS Edge browser the problem went away.


my problem solved by just adding @csrf in form tag

Laravel 5.6 doesn't support {{ csrf_field() }} just add @csrf in place of {{ csrf_field() }}

larvel_fix_error.png


Just add @csrf inside your form tag.

Or you can include csrf_token in the header to send it with every request.


if you need to change form action with Javascript you will have the same problem

1.first you need to use instead of {!!Form::open() !!} {!! close() !!} in laravel
2.second you most begin your action with https://www.example.com +your Route

Do not Forget www in your url!!!


Excluding URIs From CSRF Protection:

Sometimes you may wish to exclude a set of URIs from CSRF protection. For example, if you are using Stripe to process payments and are utilizing their webhook system, you will need to exclude your Stripe webhook handler route from CSRF protection since Stripe will not know what CSRF token to send to your routes.

Typically, you should place these kinds of routes outside of the web middleware group that the RouteServiceProvider applies to all routes in the routes/web.php file. However, you may also exclude the routes by adding their URIs to the $except property of the VerifyCsrfToken middleware:

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'stripe/*',
        'http://example.com/foo/bar',
        'http://example.com/foo/*',
    ];
}

  1. It may be csrf token do not have in your form. You have to use @crsf or {{ csrf_field() }}

  2. If you are use csrf on your form. It may be cache. Clear your app cache.

    php artisan cache:clear
    php artisan view:clear
    php artisan cache:clear
    

    그리고 브라우저 캐시를 지우십시오.

  3. 오류가 다시 표시되면 새 키를 만듭니다.

    php artisan key:generate
    

로 이동하여 App/Kernel.php댓글을 작성하십시오 \App\Http\Middleware\VerifyCsrfToken::class.

참고 URL : https://stackoverflow.com/questions/46149561/laravel-5-5-the-page-has-expired-due-to-inactivity-please-refresh-and-try-again

반응형