Muszę pobrać wszystkie pliki cookie z przeglądarki

107

Muszę, aby wszystkie pliki cookie były przechowywane w mojej przeglądarce za pomocą JavaScript. Jak można to zrobić?

informatik01
źródło
5
nayagi, niestety, jeśli odpowiemy na twoje pytanie, będziesz mieć oprogramowanie, które jest niczym innym jak ZŁE OPROGRAMOWANIE.
Jon Limjap
19
@Jon Limjap - to nie do końca prawda. Istnieją uzasadnione scenariusze umożliwiające wyliczenie wszystkich plików cookie w przeglądarce internetowej bez złośliwego oprogramowania.
Franci Penov
Zaraz, chwileczkę. Wszystkie ciasteczka? Logowanie z dowolnej strony internetowej? To złośliwe oprogramowanie ...
alexyorke
Mam sytuację (aplikacje internetowe za zaporą sieciową dla firmy), w której byłoby to przydatne i całkiem uzasadnione. Jednak problem istnieje, ponieważ mamy zbyt wiele domen wewnętrznych (głównie za pośrednictwem wirtualnych hostów), więc można by argumentować, że rozwiązaniem jest użycie jednokrotnego logowania.
ClubbedAce
Jeśli naprawdę potrzebujesz wszystkich plików cookie, musisz w tym celu utworzyć i zainstalować rozszerzenie przeglądarki. Pliki cookie używane do logowania są uważane za wrażliwe, a przeglądarki starają się zachować je w tajemnicy.
Mikko Rantalainen

Odpowiedzi:

84

Możesz uzyskać dostęp do plików cookie tylko dla określonej witryny. Użycie polecenia document.cookiespowoduje wyświetlenie listy par klucz = wartość ze zmianą znaczenia oddzielonych średnikiem.

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

Aby uprościć dostęp, musisz przeanalizować ciąg i usunąć wszystkie wpisy:

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

Więc możesz później napisać:

var myCookies = getCookies();
alert(myCookies.secret); // "do not tell you"
aemkei
źródło
5
nie przechwytuje spacji po średniku („;”), więc klawisze mają spację z przodu ... użyj /; ? / podczas rozłupywania, aby je usunąć?
Carter Cole
Sprawdź ten fragment pod kątem analizy document.cookies(z książki O'Reilly).
Bentley4
powinien naprawdę dodać .trim () do pary [0], aby upewnić się, że nie ma spacji wiodących.
Andrew Killen
38
  1. Nie widzisz plików cookie innych witryn.
  2. Nie widzisz HttpOnlyciasteczek.
  3. Wszystkie pliki cookie, które możesz zobaczyć, znajdują się we document.cookiewłaściwości, która zawiera listę par oddzielonych średnikaminame=value .
Franci Penov
źródło
28

Nie możesz. Z założenia, ze względów bezpieczeństwa, masz dostęp tylko do plików cookie ustawionych przez Twoją witrynę. StackOverflow nie widzi plików cookie ustawionych przez UserVoice ani ustawionych przez Amazon.

PhiLho
źródło
5
jak Facebook to zrobił ...? Zawsze widziałem, jak Facebook pokazuje reklamy związane z tym, co przeglądałem w Google!
Ari
17
W rzeczywistości Facebook umieszcza własne pliki cookie w każdej witrynie ... za pomocą przycisku Lubię to. Założę się, że Google robi to samo z przyciskami +1, a nawet ze skryptami statystyk witryny.
PhiLho
1
dziękuję ... to otwiera mi oczy. Myślę, że nada się każda powiązana z nimi aplikacja, w tym logowanie za pomocą aplikacji do kont mediów społecznościowych.
Ari
2
@SoursopTree - czy to nie jest AdChoices? Facebook korzysta z AdChoices, usługi Google, która wyświetla treści na podstawie Twoich wyszukiwań w Google. Stackoverflow również korzysta z AdChoices. Może trochę nie wiem, co do szczegółów - ale myślę, że właśnie o tym myślisz.
Rik
1
@KeepMove nazywamy tę terminologię synchronizacją plików cookie
ericdemo07
12

Aby pobrać wszystkie pliki cookie dla bieżącego dokumentu otwartego w przeglądarce, ponownie użyj document.cookiewłaściwości.

Codeslayer
źródło
4

Nowoczesne podejście.

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

console.log(c);

;)

Prabu samvel
źródło
2

Ponieważ w tytule nie określono, że ma być programistyczny, zakładam, że był to prawdziwy problem z debugowaniem / zarządzaniem prywatnością, a rozwiązanie jest zależne od przeglądarki i wymaga przeglądarki z wbudowaną szczegółową opłatą za zarządzanie plikami cookie i / lub modułem debugowania lub wtyczka / rozszerzenie. Wymienię jeden i poproszę inne osoby, aby pisały o przeglądarkach, które znają ze szczegółami, i proszę o precyzyjne określenie wersji.

Chrom, Iron build (SRWare Iron 4.0.280)

Menu klucza (narzędzia): Opcje / Dla zaawansowanych / [Pokaż pliki cookie i uprawnienia witryn] W przypadku powiązanych domen / witryn wpisz sufiks w polu wyszukiwania (np. .Foo.tv). Uwaga: jeśli masz podświetlony węzeł (witrynę lub plik cookie), użyj tylko opcji [Usuń], aby zabić określone poddrzewa. Użycie opcji [Usuń wszystko] spowoduje nadal usuwanie plików cookie ze wszystkich witryn wybranych przez wyszukiwanie i marnowanie sesji debugowania.

ZXX
źródło
1

Dodano trim () do klucza w obiekcie i nazwij go str, aby było bardziej jasne, że mamy tutaj do czynienia ze stringiem.

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

To, o co prosisz, jest możliwe; ale to będzie działać tylko w określonej przeglądarce. Aby to osiągnąć, musisz opracować aplikację rozszerzającą przeglądarkę. Możesz przeczytać więcej o Chrome API, aby lepiej zrozumieć. https://developer.chrome.com/extensions/cookies

Emeka Augustine
źródło