Preciso obter todos os cookies do navegador

106

Preciso ter todos os cookies armazenados no meu navegador usando JavaScript. Como pode ser feito?

informatik01
fonte
5
nayagi, infelizmente, se respondermos sua pergunta, você terá um software que não é nada menos que MALWARE.
Jon Limjap,
19
@Jon Limjap - isso não é bem verdade. Existem cenários legítimos para ser capaz de enumerar todos os cookies em um navegador da web sem ser malware.
Franci Penov,
Espere um segundo. Todos os cookies? Login de qualquer site? Isso é malware ...
alexyorke,
Eu tenho uma situação (aplicativos da web atrás do firewall para uma empresa) em que fazer isso seria útil e bastante legítimo. No entanto, o problema existe porque temos muitos domínios internos (principalmente por meio de hosts virtuais), portanto, pode-se argumentar que a solução é usar o logon único.
ClubbedAce

Respostas:

84

Você só pode acessar os cookies de um site específico. Usando, document.cookievocê obterá uma lista de pares chave = valor de escape separados por um ponto e vírgula.

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

Para simplificar o acesso, você deve analisar a string e retirar o escape de todas as entradas:

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;
}

Então você pode escrever mais tarde:

var myCookies = getCookies();
alert(myCookies.secret); // "do not tell you"
aemkei
fonte
5
isso não pega o espaço após o ponto-e-vírgula (";"), então as teclas têm um espaço na frente ... use /; ? / ao dividir para removê-los?
Carter Cole de
Verifique este snippet para análise document.cookies(do livro O'Reilly).
Bentley4
deve realmente adicionar .trim () ao par [0] para se certificar de que não há espaços à esquerda.
Andrew Killen
37
  1. Você não pode ver cookies de outros sites.
  2. Você não pode ver os HttpOnlycookies.
  3. Todos os cookies que você pode ver estão na document.cookiepropriedade, que contém uma lista de pares separados por ponto e vírgulaname=value .
Franci Penov
fonte
27

Você não pode. Por design, para fins de segurança, você pode acessar apenas os cookies definidos pelo seu site. StackOverflow não pode ver os cookies definidos pelo UserVoice nem aqueles definidos pela Amazon.

PhiLho
fonte
5
como o Facebook está fazendo isso ...? Sempre vi anúncios de programas no facebook relacionados ao que eu naveguei no google!
Ari,
16
Na verdade, o Facebook planta seus próprios cookies em cada site ... usando o botão Curtir. Aposto que o Google faz o mesmo com os botões +1 ou mesmo com os scripts de estatísticas do site.
PhiLho
1
obrigado ... está abrindo meus olhos. Acho que qualquer tipo de aplicativo relacionado a eles servirá, incluindo login usando o aplicativo de conta de mídia social.
Ari,
2
@SoursopTree - Não é AdChoices? O Facebook usa AdChoices, um serviço do Google que exibe conteúdo com base em suas pesquisas no Google. Stackoverflow usa AdChoices também. Posso estar um pouco errado nos detalhes exatos - mas acho que é nisso que você está pensando.
Rik
1
@KeepMove, chamamos essa terminologia de sincronização de cookies
ericdemo07
12

Para recuperar todos os cookies do documento atual aberto no navegador, use novamente a document.cookiepropriedade.

Codeslayer
fonte
4

Abordagem moderna.

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

console.log(c);

;)

Prabu Samvel
fonte
2

Uma vez que o título não especifica que deve ser programático, presumo que seja um problema genuíno de depuração / gerenciamento de privacidade e a solução depende do navegador e requer um navegador com ferramenta de gerenciamento de cookies detalhada e / ou um módulo de depuração ou um plug-in / extensão. Vou listar um e pedir a outras pessoas que escrevam sobre navegadores que conhecem em detalhes e sejam precisos com as versões.

Cromo, construção de ferro (SRWare Iron 4.0.280)

O menu de ferramentas (ferramentas): Opções / Configurações avançadas / [Mostrar cookies e permissões de sites] Para domínios / sites relacionados, digite o sufixo na caixa de pesquisa (como .foo.tv). Advertência: quando você tiver um nó (site ou cookie) destacado por clique, use [Remover] para eliminar subárvores específicas. Usar [Remover tudo] ainda excluirá os cookies de todos os sites selecionados por pesquisa e desperdiçará sua sessão de depuração.

ZXX
fonte
1

Adicionado trim () à chave no objeto, e nomeie-a str, para que fique mais claro que estamos lidando com string aqui.

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

O que você está pedindo é possível; mas isso só funcionará em um navegador específico. Você deve desenvolver um aplicativo de extensão de navegador para conseguir isso. Você pode ler mais sobre a API do Chrome para entender melhor. https://developer.chrome.com/extensions/cookies

Emeka Augustine
fonte