2016-06-12 3 views
0

Laravel 버전 5.2.37을 사용하고 있습니다. 내가 양식을 제출하지 않고 클라이언트의 (의 cPanel, PHP 5.5.36)을 공유 호스팅에 코드를 업로드 할 때, 나는 새로 고침을 명중하고Laravel은 새로 고침 할 때마다 새 CSRF 토큰을 만듭니다.

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

: 나는 다음 행 블레이드보기에서 간단한 HTML 양식을 가지고 csrf 토큰 값이 계속 변경됩니다.

그러나 로컬 컴퓨터 (MacOS/Apache2/5.6.16)에서는 csrf 토큰이 config/session.php 설정별로 2 분 이상 지속됩니다. 이 문제를 일으키는 PHP 5.5.36 버전 일 수 있습니까?

업데이트 : CSRF 유효성 검사를 해제하고 세션이 파일에 저장되었지만 다른 페이지에서 호출 될 때 더 이상 발견되지 않는다는 것을 발견했습니다. 또한이 서버가 PCI 규격을 준수한다는 사실을 알려 드리고자합니다.

+0

제출할 때 작동합니까? –

+0

세션에 값을 입력 한 다음 해당 값을 얻으려면 라우트를 누르십시오. 세션 재생성 문제를 확인합니다. – lagbox

+0

Ajax를 통해 제출할 때 TokenMismatchException이 발생합니다. 라우트를 Route :: group ([ 'middleware'=> [ 'web'], function() {...}'에 래핑하려고했으나 아무런 소용이 없었습니다. 새로 고침시 csrf 토큰을 재생성해서는 안됩니다. – bazzaretta

답변

0

글쎄, 마침내 알아 냈어. 당신은 아마 워드 프레스 내에서 다음과 같이 작성 기능을 많이 본 적이

<?php 
function doSomething($arg) 
{ 
    ?><p>When this function is called, 
    display <b><?php echo $arg; ?> value.</b></p> 
    <?php 
} 
?> 

: 바보 같은 내게는 다음과 같이보고하는 기능을 사용자 지정 도우미를했다. 장인 코드는 아니지만 대부분의 경우 잘 작동하지만 Laravel은 도우미를 상대 할 때 이런 유형의 넌센스를 용인하지 않습니다. 내가 대신 문자열을 반환 내 기능을 쓴 후, 그래서 모든 것이 정상으로 돌아왔다 : 이야기의

<?php  
function doSomething($arg) 
{ 
    return '<p>When this function is invoked, 
    display <b>' . $arg . '</b> value.</p>'; 
}  
?> 

도덕적 - 추한 코드를 작성하지 않습니다. 함수가 반환되는지 확인하고 특히 도우미 함수를 사용하여 문자열을 직접 에코/인쇄하지 마십시오.

여전히 영구 토큰에 문제가있는 경우 프로젝트 바로 옆에 Laravel을 설치하고 기본 토큰 테스트를 실행 한 다음 가능한 오류에 대해 추가 한 모든 사용자 지정 코드를 확인하는 것이 좋습니다. 99 %의 확실성으로 나는 에러가 당신의 코드에 의해 발생한다고 말합니다.

1

config/session.php에서 'domain'을 올바른 경로로 정의하십시오. 기본적으로 null로 설정되어 있지만 서버에서는이를 지워야합니다.

+0

시도했습니다. 작동하지 않았습니다. CSRF를 비활성화해야한다고 생각합니다. VerifyCsrfToken 클래스의 URI 보호. 적절한 해결책을 찾으면 여기에 게시 할 것입니다. – bazzaretta

관련 문제