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
경로는 사후 경로입니다. 그 이름은 'get'이므로 postGet() 함수 이름입니다. (나는 최선의 명명법을 안다.) 나는이 경로가 의도 한대로 작동한다는 것을 안다. 범인이라고 생각하는 postSet 함수입니다. 즉, JS의 작업 순서, 즉 응답 전에 페이지를 다시로드하는 것은 쿠키와 함께 전송됩니다. – EpicWally
여기에 같은 문제가 있다고 생각합니다. http://stackoverflow.com/questions/22903995/trying-to-set-cookie-in-ajax-call-laravel –
"headers_sent()를 사용하여 그 헤더는 쿠키를 설정하고 응답을 반환하기 전에 이미 전송되지 않았습니다. " 그래서 같은 문제는 아닙니다. – EpicWally