[javascript] JS의 document.cookie에서 쿠키에 액세스 할 수 없지만 브라우저에 쿠키가 있음이 표시됨
JavaScript에서 쿠키에 액세스 할 수 없습니다. 사용자 지정 검사를 위해 일부 값을 읽고 JSON을 통해 보내야합니다.
다음에서 설명한 것처럼 JS에서 쿠키에 액세스하려고했습니다.
코드에서 볼 수 있듯이 다음에는 수정처럼 명확하게 보입니다.
var c_value = document.cookie;
document.cookie
Chrome의 웹 디버거에서 값 에 액세스하려고 할 때 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
분야의 문제 . 그것은true
http 만 사용하고있었습니다.- 의 문제
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 });
그러나 보안이 비보안으로 변경 될 수 있으므로 쿠키를 삭제하고 일부 작업을 수행 할 수 있도록 서버 측에서 수행 할 솔루션을 찾아야합니다.
서버 측에서 변경이 가능합니다.