programing

라벨 5.5사용하지 않아 페이지가 만료되었습니다.새로 고침 후 다시 시도하십시오.

muds 2023. 8. 14. 23:11
반응형

라벨 5.5사용하지 않아 페이지가 만료되었습니다.새로 고침 후 다시 시도하십시오.

저는 라라벨을 처음 만나는데 이해할 수 없는 문제가 있습니다.저는 프로젝트에 а 로그 양식이 있으며, 제 방법은 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용 업데이트

은 새로운 Laravel은새로통합다니합능을기운ates▁new를 통합합니다.@csrf{{ csrf_field() }}지금은 그게 더 멋져 보여요.

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

응용프로그램에서 HTML 양식을 정의할 때마다 CSRF 보호 미들웨어가 요청의 유효성을 검사할 수 있도록 양식에 숨겨진 CSRF 토큰 필드를 포함해야 합니다.다음을 사용할 수 있습니다.csrf_field토큰 필드를 생성하는 도우미:

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

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

자세한 내용은 링크를 여십시오. - Laravel 5.5의 CSRF Protection.

업데이트:

블레이드 템플릿을 사용하는 Laravel 5.6을 사용하면 매우 간단합니다.

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

자세한 내용은 링크를 여십시오. - Laravel 5.6의 CSRF Protection.

config/session.php 파일에 이 행이 포함되어 있는지 확인합니다.

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

그런 다음 제거합니다.SESSION_DOMAIN in your .env file.env .

나의 경우, 나는 ob_start();를 서버의 index.php의 맨 위에 추가했고 모든 것이 잘 작동하는 것 같습니다.

CSRF 보호에서 URI 제외:

경우에 따라 CSRF 보호에서 URI 집합을 제외할 수도 있습니다.예를 들어 Stripe를 사용하여 결제를 처리하고 웹 훅 시스템을 사용하는 경우 Stripe는 어떤 CSRF 토큰을 경로로 보낼지 모르기 때문에 Stripe 웹 훅 핸들러 경로를 CSRF 보호에서 제외해야 합니다.

일반적으로 이러한 종류의 경로는 RouteServiceProvider가 routes/web.php 파일의 모든 경로에 적용하는 웹 미들웨어 그룹 외부에 배치해야 합니다.그러나 VerifyCsrfToken 미들웨어의 $except 속성에 URI를 추가하여 경로를 제외할 수도 있습니다.

<?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/*',
    ];
}

저도 같은 문제가 있었습니다.크롬에서 '클리어 브라우징 데이터'를 사용하면 문제를 해결할 수 있습니다.

이 문제는 Laravel 설치의 기본 CSRV 미들웨어를 사용하고 있기 때문에 발생합니다.해결하려면 커널에서 이 줄을 제거합니다.php:

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

API를 구축하는 경우에는 이 옵션을 선택할 수 있습니다.그러나 웹 사이트를 구축하는 경우 이는 보안 검증이므로 위험에 유의해야 합니다.

몇 주 동안 여러 가지 해결책을 시도했지만 성공하지 못했습니다.

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

문제가 발생하면 구성/세션을 업데이트하십시오.php는 당신이 실행하고 있는 라라벨의 버전과 일치합니다.

저도 같은 문제가 있었습니다. 여러 가지 해결책을 시도해 보았지만 아무 것도 효과가 없었습니다. 그 후 어떤 이유로든 제 .env 파일에서 이 문제를 사용하고 있다는 것을 알게 되었습니다.

SESSION_DOMAIN= myapp.me

제가 무효로 되돌리자마자 모든 것이 정상적으로 작동했습니다.

{{csrf_field()}}의 의너안에.form꼬리표를 달다

enter image description here

먼저 양식에 csrf를 포함합니다.

{{ csrf_field() }}

문제가 해결되지 않으면 다음을 사용합니다.ob_start();index.의 맨 됩니다.

<?php ob_start();

CSRF 토큰을 양식에 이미 포함한 경우.그러면 양식의 캐시 데이터 때문에 오류 페이지가 표시됩니다.

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

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

또한 이러한 명령을 실행하는 동안 브라우저 캐시를 지우십시오.

:SESSION_DRIVER=file세션 디렉토리가 쓰기 가능한지 확인해야 합니다.인확을 합니다.storage/framework/session

제 경우, 이전에 '공간'이 있었습니다.<?php내 구성 파일 중 하나에.이것으로 저의 문제가 해결되었습니다.

이 코드를 양식 안에 넣기만 하면 됩니다.

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

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

SESSION_DRIVER=yourwebsite.com

여전히 누구나 이 문제를 가지고 있습니다. 아래와 같이 양식 안에 있는 다음 코드를 사용하십시오.

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

그냥추를 추가하세요.@csrf양식 태그 안에 있습니다.

또는 다음을 포함할 수 있습니다.csrf_token헤더에서 모든 요청과 함께 전송합니다.

만약 당신이 자바스크립트로 폼 동작을 변경해야 한다면 당신은 같은 문제를 겪을 것입니다.

1.먼저 대신 사용해야 합니다.{!!Form::open() !!} {!! close() !!}
2. 번째로 당신의 행동을 가장 먼저 시작합니다.https://www.example.com +your Route

URL에서 www를 잊지 마세요!!!

저의 경우 추가하는 것을 잊어버려서 동일한 문제가 발생했습니다.> 숨진 입력필 끝다같 표음다니시됩이과에드의.<input type="hidden" name="_token" value="{{ Session::token() }}"

그래서 다음과 같이 추가하여 수정했습니다.

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

재미있지만 저에게는 효과가 있습니다. 저는 이것이 라벨 코드의 기본 HTML 태그 때문에 발생한다는 것을 깨달았습니다.대신 /* */ 또는 {{------}을(를) 사용합니다.

또는 코드에서 최근 HtmlComent를 제거하려고 합니다.또는 Html 주석을 PHP 주석으로 변경...아니면 phpartisan clean browser와 같은 AnyWrong artistan 명령을 실행해 보십시오. 그리고 그것이 오류와 함께 HTML 주석 데이터를 출력하는지 확인하세요.

라우터에서 경로를 복사하여 작동시켰습니다.php는 Auth::routes()를 사용하는 대신 다음 경로가 필요합니다.

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() }}하지만 여전히 작동하지 않았습니다.

그때 제가 개발 목적으로 쿠키를 모두 차단한 것이 생각났는데, 페이지를 변경하고 새로 고치고 싶을 때 유용할 수 있습니다.

의 모든 쿠키 차단을 중지하도록 설정을 변경한 후MS Edge browser문제가 사라졌습니다.

추가하는 것만으로 해결된 나의 문제@csrf 형식으로

Laravel 5.6하지 {{ csrf_field() }} 그냥추를 추가합니다.@csrf신에를 {{ csrf_field() }}

lavel_fix_error.png

  1. 양식에 csrf 토큰이 없을 수 있습니다.사용해야 합니다.@crsf또는{{ csrf_field() }}

  2. 양식에 csrf를 사용하는 경우.캐시일 수 있습니다.앱 캐시를 지웁니다.

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

    브라우저 캐시를 지웁니다.

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

    php artisan key:generate
    

아직도 이 문제에 대한 답을 찾고 있는 사람이 있다면요.로컬 서버와 프로덕션 서버를 전환하고 두 사이트에 모두 로그온할 때 이 문제가 발생합니다.문제를 해결하려면 세션을 삭제하십시오.

설정만 하면 됩니다.'expire_on_close' => trueconfig\session.php를 다시 합니다.

저는 최근에 이 문제를 겪었고, 여기서 제안된 모든 솔루션(그리고 인터넷)을 5일 동안 성공적으로 시도하지 못했습니다.

내 경우 환경:

라라벨: 5.5

PHP: 7.2

SSL: 프로덕션

아파치

센토스

문제는 git --bare 저장소를 사용하여 배포를 자동화했다는 것입니다.

푸시 시 모든 폴더가 0775(git 사용자로부터 상속됨) 권한을 가집니다.응답이 실행되면 이 권한을 모든 폴더에 복제합니다.예를 들어 설치를 구성할 때 모든 공급업체 폴더에도 이 권한이 있습니다.

csrf에는 특히 SSL(암호화된 환경)을 사용하는 경우 안전하지 않은 것으로 간주되는 것을 차단하는 정책이 있습니다.

배포를 수동으로 수행하기로 결정하고, 프로젝트의 압축을 풀고, 압축을 풀고, 캐시와 종속성을 생성하는 명령을 실행했을 때 비로소 문제를 깨달았습니다.그런 다음 모든 폴더가 0755(시스템 사용자로부터 상속됨) 권한을 가지고 있다는 것을 깨달았습니다.안전한 것으로 간주되는 기본 권한입니다.

제 경우에는 웹 브라우저(Android용 Firefox)나 저장 공간이 꽉 찬 스마트폰에서 문제가 발생한 것 같습니다.다른 브라우저와 장치에서 작동합니다.그런데 양식을 통해 파일을 보낼 때만 문제가 발생합니다. 현재 https://filebin.net 과 같은 웹 사이트에서는 이 브라우저를 통해 스마트폰에서 파일을 업로드할 수 없습니다.

이것은 저에게 매우 간단합니다. 아마도 스토리지/프레임워크/세션에 세션 폴더가 누락되었을 수 있습니다.

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

반응형