sourcecode

클라이언트에 쿠키가 설정되지 않을 수 있는 이유는 무엇입니까?

copyscript 2023. 10. 6. 21:55
반응형

클라이언트에 쿠키가 설정되지 않을 수 있는 이유는 무엇입니까?

jQuery.jax를 사용하여 다른 호스트에 대한 요청을 수행하는 웹 응용 프로그램이 있습니다("localhost"의 다른 포트를 사용하기 때문에 지금은 실제로 동일합니다).그러면 서버는 쿠키를 반환합니다.

Chrome의 Dev Tools에 나와 있는 HTTP 응답의 cookie 값은

Set-Cookie: MyUserSession=JxQoyzYm1VfESmuh-v22wyiyLREyOkuQWauziTrimjKo=;expires=Sun, 10 Feb 2013 22:08:47 GMT;path=/api/rest/

그리고 앞으로 4시간의 기간이 만료됩니다.

그러나 쿠키는 저장되지 않고 후속 요청과 함께 전송됩니다(Chrome과 Firefox 모두에서 테스트됨).저는 처음에 "2013년 2월 10일"이 아니라 "2013년 2월 10일"이어야 한다고 생각했지만, 그것은 차이가 없습니다.Chrome은 응답의 쿠키 탭에 "유효기간"이 "유효기간"으로 표시되기도 하지만, 이는 Dev Tools 버그일 수도 있습니다.

무슨 생각 있어요?

해결책을 찾은 것 같습니다.개발 중에 서버는 "localhost:30002"이고 웹 앱은 "localhost:8003"이므로 CORS와 관련하여 서로 다른 호스트로 간주됩니다.따라서 서버에 대한 모든 요청은 CORS 보안 규칙, 특히 자격 증명이 있는 요청에 의해 처리됩니다."자격 증명"에는 해당 링크에 명시된 쿠키가 포함되어 있으므로, 반환된 쿠키가 전달되지 않았기 때문에 수락되지 않았습니다.

xhrFields: {
  withCredentials: true
}

jQuery's에$.ajax기능.쿠키를 보내려면 그 옵션을 다음 CORS 요청에도 전달해야 합니다.

머리말을 추가했습니다.Access-Control-Allow-Credentials: true서버측에서 변경하였습니다.Access-Control-Allow-Origin머리글 와일드카드에서 다음으로http://localhost:8003(포트 번호가 유효합니다!).그 솔루션은 이제 저에게 효과가 있고 쿠키는 저장됩니다.

몇 시간 동안 비슷한 시나리오(CORS 없음)로 고심하다가 또 다른 잠재적인 이유를 발견했습니다. 쿠키의 경로를 명시적으로 설정해야 한다는 것입니다.

내 프론트엔드 앱에서 전화가 걸려왔습니다.HOST_URL/api/members/login, 그리고 이것은 오른쪽으로 돌아오고 있었습니다.Set-Cookie헤더, 경로 없음.

밑에 쿠키가 보였는데Response CookiesChrome DevTools에서, 그러나 그 이후의 요청들은 그것을 포함하지 않았습니다.에 갔다chrome://settings/cookies, 쿠키는 거기에 있었지만, 길은/api/members.

서버측에서 쿠키를 설정할 때 루트 경로를 지정하면 문제가 해결됩니다.

당신은 어디서 날짜를 얻습니까?

수동으로 추가할 경우 장애 방지를 시도합니다.

var exdays = 3; //3 days valid as an example
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
//Now set the cookie to said exdate
document.cookie = "MyUserSession =" + escape(JxQoyzYm1VfESmuh-v22wyiyLREyOkuQWauziTrimjKo=)+"; expires="+exdate.toUTCString());

언급URL : https://stackoverflow.com/questions/14801021/what-can-cause-a-cookie-not-to-be-set-on-the-client

반응형