2014-04-24 5 views
2

ajax를 통해 laravel에서 쿠키를 설정하는 데 문제가 있습니다. 나는 많은 질문/게시물을 읽어 보았습니다.Laravel Ajax로 쿠키 설정

변경된 경우 js를 사용하여 쿠키를 설정하고 해당 쿠키로 응답을 반환하는 컨트롤러에 값을 게시 한 다음 페이지가 아약스 완료시 새로 고침되고 document.ready에서 새로 고침됩니다 스크립트를 실행하면 get cookie 라우트를 호출하여 해당 쿠키에서 값을 검색합니다. 쿠키가 전송되지 않는 것 같습니다. get 경로가 작동하는 것을 알고 있습니다. 쿠키를 제대로 가져 오는 것처럼 설정합니다. 쿠키를 설정하고 응답을 반환하기 전에 헤더가 아직 보내지지 않았는지 확인하기 위해 headers_sent()도 사용했습니다. 나는 또한 다른 많은 질문과 답변에서 Cookie :: queue, $ response-> withCookie ($ cookie) 및 $ response-> headers-> setCookie ($ cookie)를 포함하여 여러 가지 접근법을 시도했다. 그 중 내가 일하는 것을 발견했습니다.

내 접근 방식에 문제가 있습니까? 또는 문법 문제 일 가능성이 더 큽니까?

내 자바 스크립트 : 쿠키

function trans(lang){ 
    $.post('cookie/set' , {'name':'language', 'value':lang, 'timeout':-1}) 
    .done(function(data){ 
     removeEvent(); 
    }).always(function(){ 
     window.location.reload(); 
    }); 
} 

컨트롤러 기능/설정 : 자바 스크립트 doc.ready

public function postSet(){ 
    $name = Input::get('name'); 
    $value = Input::get('value'); 
    $timeout = Input::get('timeout'); 
    if(Request::ajax()){ 
     Log::info('cookie', array('name'=>$name, 'value'=>$value, 'timeout'=>$timeout)); 
     $cookie = Cookie::make($name, $value, $timeout); 
     $response = Response::make(); 
     $response->headers->setCookie($cookie); 
     return $response->withCookie($cookie); 
    } 
} 

:

$(document).ready(function(){ 
    $.post('cookie/get' , {'name':'language'}) 
    .done(function(data){ 
     if (!data){ 
      alert('no cookie'); 
     } 
     $("#language").val(data); 
     removeEvent(); 
    }); 
}) 

마지막으로 쿠키/얻을 컨트롤러 기능

:

public function postGet(){ 
    $name = Input::get('name'); 
    define('__TRANSLATEMODE',"raw"); 
    return Cookie::get($name); 
} 

다시 말하면 get 경로가 올바르게 작동하는지 확인할 수 있습니다. 내 생각에 어떻게 든 쿠키가 설정된 아약스 호출의 응답과 함께 반환되지 않지만 그 이유를 이해하지 못한다.

미리 도움 주셔서 감사합니다. -Wally

편집 :

내가 불을 지르고에서 요청과 응답 보았다, 그리고 postSet 경로에서 응답이 쿠키를 포함하지 않는 것 같습니다. 나는 이것을 다소 의심했다. 그러나 최소한 이것은 문제의 근원을 못살게 굴지. 왜 그것이 작동하고 싶지 않은지 아직 확실하지 않습니다.

편집 2 :

해결했습니다. 이것이 작동하는 이유를 잘 모르지만 아래의 코드가 작동합니다. 빈 응답을 반환해도 쿠키가 전송되지 않는 것 같습니다. 몰라, 적어도 해결 됐어. 나는 그것이 나를 허락 할 때 이것을 대답 할 것이고 받아 들일 수있는 것으로 표시 할 것이다. (누가이 문제를 해결했는지 알면 크게 환영 할 것입니다.)

public function postSet(){ 
    $name = Input::get('name'); 
    $value = Input::get('value'); 
    $timeout = Input::get('timeout'); 
    Cookie::queue($name, $value, $timeout); 
    $response = Response::make(); 
    return Response::make('test'); 
} 

바라본 사람들 덕분에 다른 사람에게 도움이되었습니다. -Wally

답변

0

해결했습니다. 이것이 작동하는 이유를 잘 모르지만 아래의 코드가 작동합니다. 빈 응답을 반환해도 쿠키가 전송되지 않는 것 같습니다. 몰라, 적어도 해결 됐어.나는 그것이 나를 허락 할 때 이것을 대답 할 것이고 받아 들일 수있는 것으로 표시 할 것이다. (누가이 문제를 해결했는지 알면 크게 환영 할 것입니다.)

public function postSet(){ 
    $name = Input::get('name'); 
    $value = Input::get('value'); 
    $timeout = Input::get('timeout'); 
    Cookie::queue($name, $value, $timeout); 
    $response = Response::make(); 
    return Response::make('test'); 
} 

바라본 사람들 덕분에 다른 사람에게 도움이되었습니다. -Wally

1

경로 가져 오기 기능이있는 js Post 기능이 있습니다. 이것은 Laravel에서 작동하지 않습니다.

전체 이슈가 있지만 경로를 확인하면 문제를 좁히는 데 도움이되는지 확실하지 않습니다.

+0

경로는 사후 경로입니다. 그 이름은 'get'이므로 postGet() 함수 이름입니다. (나는 최선의 명명법을 안다.) 나는이 경로가 의도 한대로 작동한다는 것을 안다. 범인이라고 생각하는 postSet 함수입니다. 즉, JS의 작업 순서, 즉 응답 전에 페이지를 다시로드하는 것은 쿠키와 함께 전송됩니다. – EpicWally

+0

여기에 같은 문제가 있다고 생각합니다. http://stackoverflow.com/questions/22903995/trying-to-set-cookie-in-ajax-call-laravel –

+0

"headers_sent()를 사용하여 그 헤더는 쿠키를 설정하고 응답을 반환하기 전에 이미 전송되지 않았습니다. " 그래서 같은 문제는 아닙니다. – EpicWally