브라우저에서 모든 쿠키를 가져와야합니다


106

JavaScript를 사용하여 브라우저에 저장된 모든 쿠키 를 가져와야합니다. 어떻게 할 수 있습니까?


5
nayagi, 불행히도 우리가 귀하의 질문에 대답한다면 MALWARE 이상의 소프트웨어를 갖게 될 것입니다.
Jon Limjap

19
@Jon Limjap-사실이 아닙니다. 멀웨어없이 웹 브라우저의 모든 쿠키를 통해 열거 할 수있는 합법적 인 시나리오가 있습니다.
Franci Penov

잠깐만 요. 모든 쿠키? 웹 사이트에서 로그인 했습니까? 그건 멀웨어입니다 ...
alexyorke 2011-04-07

이 작업이 편리하고 합법적 인 상황 (비즈니스 용 방화벽 뒤의 웹 앱)이 있습니다. 그러나 문제는 내부 도메인이 너무 많기 때문에 (주로 가상 호스트를 통해) 단일 사인온을 사용하는 것이라고 주장 할 수 있습니다.
ClubbedAce 2014 년

답변:


84

특정 사이트의 쿠키에만 액세스 할 수 있습니다. 를 사용 document.cookie하면 세미콜론으로 구분 된 이스케이프 된 키 = 값 쌍 목록을 얻을 수 있습니다.

secret=do%20not%20tell%you;last_visit=1225445171794

액세스를 단순화하려면 문자열을 구문 분석하고 모든 항목을 이스케이프 해제해야합니다.

var getCookies = function(){
  var pairs = document.cookie.split(";");
  var cookies = {};
  for (var i=0; i<pairs.length; i++){
    var pair = pairs[i].split("=");
    cookies[(pair[0]+'').trim()] = unescape(pair.slice(1).join('='));
  }
  return cookies;
}

따라서 나중에 다음과 같이 작성할 수 있습니다.

var myCookies = getCookies();
alert(myCookies.secret); // "do not tell you"

5
이것은 세미콜론 ( ";") 뒤의 공백을 잡지 않으므로 키 앞에 공백이 있습니다 ... use /; ? / 그들을 제거하기 위해 분할 할 때?
Carter Cole

구문 분석을 위해이 스 니펫을 확인하십시오 document.cookies(O'Reilly 책에서 발췌 ).
Bentley4 2011

.trim ()을 pair [0]에 추가하여 선행 공백이 없는지 확인해야합니다.
Andrew Killen

37
  1. 다른 사이트의 쿠키는 볼 수 없습니다.
  2. HttpOnly쿠키를 볼 수 없습니다 .
  3. 볼 수있는 모든 쿠키 document.cookie세미콜론으로 구분name=value쌍 목록 이 포함 된 속성에 있습니다 .

27

당신은 할 수 없습니다. 설계 상 보안을 위해 사이트에서 설정 한 쿠키에만 액세스 할 수 있습니다. StackOverflow는 UserVoice에서 설정 한 쿠키 나 Amazon에서 설정 한 쿠키를 볼 수 없습니다.


5
페이스 북은 어떻게 했어 ...? 저는 항상 페이스 북이 제가 구글에서 검색 한 것과 관련된 광고를 보여주는 것을 보았습니다!
아리

16
실제로 Facebook은 좋아요 버튼을 사용하여 모든 사이트에 자체 쿠키를 설치합니다. 나는 Google이 +1 버튼이나 사이트 통계 스크립트에서도 똑같이 할 것이라고 확신합니다.
PhiLho

1
고마워요 ... 눈이 뜨 네요. 소셜 미디어 계정 앱을 사용한 로그인을 포함하여 관련 앱은 모두 가능하다고 생각합니다.
아리

2
@SoursopTree-AdChoices 아닌가요? Facebook은 Google을 통한 검색을 기반으로 콘텐츠를 표시하는 Google 서비스 인 AdChoices를 사용합니다. Stackoverflow는 AdChoices도 사용합니다. 나는 정확한 세부 사항에 대해 약간 벗어 났을 수 있지만 그것이 당신이 생각하는 것입니다.
Rik

1
@KeepMove 우리는이 용어를 쿠키 동기화
ericdemo07

12

브라우저에 열려있는 현재 문서에 대한 모든 쿠키를 검색하려면 document.cookie속성 을 다시 사용합니다 .


4

현대적인 접근.

let c = document.cookie.split(";").reduce( (ac, cv, i) => Object.assign(ac, {[cv.split('=')[0]]: cv.split('=')[1]}), {});

console.log(c);

;)


2

제목에 프로그래밍 방식이어야 함을 명시하지 않았기 때문에 이것이 진정한 디버깅 / 개인 정보 관리 문제였으며 해결책은 브라우저에 따라 다르며 자세한 쿠키 관리 요금 및 / 또는 디버깅 모듈이 내장 된 브라우저가 필요하다고 가정하겠습니다. 플러그인 / 확장. 나는 하나를 나열하고 다른 사람들에게 그들이 아는 브라우저에 자세히 적어달라고 요청하고 버전을 정확하게 작성하십시오.

Chromium, Iron 빌드 (SRWare Iron 4.0.280)

공구 모양 (도구) 메뉴 : 옵션 / 고급 설정 / [쿠키 및 웹 사이트 권한 표시] 관련 도메인 / 사이트의 경우 검색 창에 접미사를 입력합니다 (예 : .foo.tv). 주의 : 노드 (사이트 또는 쿠키)를 클릭하여 강조 표시 한 경우 [제거]를 사용하여 특정 하위 트리 만 제거하십시오. [모두 제거]를 사용하면 검색에서 선택한 모든 사이트의 쿠키가 계속 삭제되고 디버깅 세션이 낭비됩니다.


1

object의 키에 trim ()을 추가하고 이름을 str로 지정하면 여기서 문자열을 다루는 것이 더 명확 해집니다.

export const getAllCookies = () => document.cookie.split(';').reduce((ac, str) => Object.assign(ac, {[str.split('=')[0].trim()]: str.split('=')[1]}), {});


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.