[javascript] JS의 document.cookie에서 쿠키에 액세스 할 수 없지만 브라우저에 쿠키가 있음이 표시됨

JavaScript에서 쿠키에 액세스 할 수 없습니다. 사용자 지정 검사를 위해 일부 값을 읽고 JSON을 통해 보내야합니다.

다음에서 설명한 것처럼 JS에서 쿠키에 액세스하려고했습니다.

코드에서 볼 수 있듯이 다음에는 수정처럼 명확하게 보입니다.

var c_value = document.cookie;

document.cookieChrome의 웹 디버거에서 값 에 액세스하려고 할 때 Watch 표현식에 빈 문자열 만 표시됩니다 .

그래서 필요한 쿠키 값을 읽을 수 없습니다.

관련 값을 얻기 위해 보내는 쿠키 이름이 올바른지 확인했습니다. 또한 관심이 있다면 쿠키를 얻기 위해 W3Schools 소스 코드를 사용하고 있습니다 (하지만 두 번째 링크에서 기술은 비슷합니다).

문제를 어떻게 해결할 수 있습니까?



답변

httponly쿠키를 다룰 가능성이 높습니다 . httponly쿠키에 설정할 수있는 플래그로 JavaScript로 액세스 할 수 없습니다. 이는 악성 스크립트가 민감한 데이터 또는 전체 세션으로 쿠키를 훔치는 것을 방지하기위한 것입니다.

따라서 httponly플래그 를 비활성화 하거나 자바 스크립트로 데이터를 가져 오는 다른 방법을 찾아야합니다.

코드를 살펴보면 http 전용 플래그를 쉽게 비활성화 할 수 있습니다.

Response.AddHeader("Set-Cookie", "CookieName=CookieValue; path=/;");
Response.SetCookie(new HttpCookie("session-id") { Value = Guid.NewGuid().ToString(), HttpOnly = false });
Response.SetCookie(new HttpCookie("user-name") { Value = data.Login, HttpOnly = false });

이제 JavaScript에서 쿠키 정보에 액세스 할 수 있습니다. 그러나 나는 당신이 어떤 종류의 데이터를 얻으려고하는지 정확히 알지 못하므로 대신 다른 접근 방식을 사용할 수 있으며 예를 들어 쿠키를 읽는 대신 필요한 정보로 페이지에서 일부 데이터 속성을 렌더링 할 수 있습니다.

<div id="example" data-info="whatever data you are trying to retrieve"></div>

console.log(document.getElementById('example').getAttribute('data-info'));


답변

http 만 첫 번째 범인이라고 말하고 싶지만 쿠키 범위를 설정하지 않으면 발생할 수도 있습니다.

사이트가 다른 도메인에서 리디렉션 된 경우 쿠키 범위 설정을 조사해야합니다. 도메인 및 경로는 쿠키가 전송되어야하는 URL의 쿠키 범위를 정의합니다. 이에 따라 응답에 쿠키가 표시되지 않을 수 있습니다.

성공적인 SAML SSO 로그인에 쿠키를 설정할 때이 문제가 발생했으며 요청의 일부로 전송되지 않았기 때문에 문서에서 쿠키를 검색 할 수 없습니다.


답변

쿠키는 경로 아래의 하위 디렉토리에만 표시되므로 쿠키의 경로 속성도 주시하십시오. 문제가 발생하여 경로 “/”설정을 해결했습니다.


답변

나는 같은 문제가 여러 번 있었다. 그리고 매번 다른 이유가있었습니다.

다른 이유 :

  • httpOnly분야의 문제 . 로 설정되었고 false콘솔에서 액세스하려고했습니다. 그것을 설정 true하거나 소스 코드에서 액세스하는 것이 트릭을 수행했습니다.
  • secure분야의 문제 . 그것은 truehttp 만 사용하고있었습니다.
  • 의 문제 Expires / Max-Age. 쿠키가 오래되어에서 볼 수 없습니다 document.cookie.


답변

쿠키가 응답 헤더 컬렉션으로 설정되어 Set-Cookie있거나 Set-Cookie2일부가 아닌 경우 : http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28%29-method

필드 이름이 Set-Cookie 또는 Set-Cookie2 인 헤더를 제외하고 응답에서 모든 헤더를 반환합니다.


답변

보안 인증을 사용하는 경우 보안 때문에 쿠키에 직접 액세스 할 수 없습니다. 아래 코드를 사용하여 서버 측에서 일부 응답 속성을 변경해야합니다.

Response.AddHeader("Set-Cookie", "CookieName=CookieValue; path=/;");
Response.SetCookie(new HttpCookie("session-id") { Value = Guid.NewGuid().ToString(), HttpOnly = false });
Response.SetCookie(new HttpCookie("user-name") { Value = data.Login, HttpOnly = false });

그러나 보안이 비보안으로 변경 될 수 있으므로 쿠키를 삭제하고 일부 작업을 수행 할 수 있도록 서버 측에서 수행 할 솔루션을 찾아야합니다.

서버 측에서 변경이 가능합니다.


답변