Мне нужно получить все файлы cookie из браузера


107

Мне нужно получить все файлы cookie, хранящиеся в моем браузере, с помощью JavaScript. Как это сделать?


5
Наяги, к сожалению, если мы ответим на ваш вопрос, у вас будет программное обеспечение, которое является не чем иным, как ВРЕДОНОСНЫМ ПО.
— Джон Лимджап,

19
@Jon Limjap - это не совсем так. Существуют допустимые сценарии, позволяющие перечислять все файлы cookie в веб-браузере, не будучи вредоносными.
— Франси Пенов,

Подожди секунду. Все куки? Вход с любого сайта? Это вредоносная программа ...
— Alexyorke

У меня есть ситуация (веб-приложения за брандмауэром для бизнеса), когда это было бы удобно и вполне законно. Однако проблема существует из-за того, что у нас слишком много внутренних доменов (в основном через виртуальные хосты), поэтому можно утверждать, что решением является использование единого входа.
— ClubbedAce

Если вам действительно нужны все файлы cookie, вам необходимо создать и установить для этого расширение браузера. Файлы cookie, используемые для входа в систему, считаются конфиденциальными, и браузеры делают все возможное, чтобы сохранить их в секрете.
— Микко Ранталайнен,

Ответы:


84

Вы можете получить доступ только к файлам cookie для определенного сайта. Используя, 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 /; ? / при разделении их убрать?
— Картер Коул,

Проверьте этот фрагмент на анализ document.cookies(из книги О'Рейли).
— Bentley4 04

действительно следует добавить .trim () к паре [0], чтобы убедиться, что нет начальных пробелов.
— Эндрю Киллен

38
  1. Вы не можете видеть файлы cookie для других сайтов.
  2. Вы не видите HttpOnlyкуки.
  3. Все файлы cookie, которые вы видите, находятся в document.cookieсвойстве, которое содержит список пар, разделенных точкой с запятойname=value .

28

Ты не можешь. По умолчанию в целях безопасности вы можете получить доступ только к файлам cookie, установленным вашим сайтом. StackOverflow не видит файлы cookie, установленные UserVoice, и файлы cookie, установленные Amazon.


5
как facebook сделал это ...? Я всегда видел, как facebook показывает рекламу, связанную с тем, что я просматривал в Google!
— Ари

17
Фактически, Facebook размещает собственные файлы cookie на каждом сайте ... с помощью кнопки «Нравится». Готов поспорить, что Google делает то же самое с кнопками +1 или даже со скриптами статистики сайта.
— PhiLho

1
спасибо ... это открывает мне глаза. Я думаю, что подойдет любое связанное с ними приложение, включая вход в систему с помощью приложения для учетной записи в социальных сетях.
— Ари

2
@SoursopTree - Разве это не AdChoices? Facebook использует AdChoices, сервис Google, отображающий контент на основе ваших поисковых запросов в Google. Stackoverflow также использует AdChoices. Возможно, я не совсем точен в деталях, но я предполагаю, что это именно то, о чем вы думаете.
— Рик

1
@KeepMove, мы называем эту терминологию синхронизацией
— файлов

12

Чтобы получить все файлы cookie для текущего документа, открытого в браузере, вы снова используете 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

Поскольку в заголовке не указано, что это должно быть программное обеспечение, я предполагаю, что это была настоящая проблема отладки / управления конфиденциальностью, и решение зависит от браузера и требует браузера со встроенным подробным сбором данных для управления файлами cookie и / или модуля отладки или плагин / расширение. Я собираюсь перечислить один и попрошу других подробно описать браузеры, которые они знают, и, пожалуйста, уточняйте версии.

Хром, железо (SRWare Iron 4.0.280)

Меню гаечного ключа (инструмента): Параметры / Под капотом / [Показать файлы cookie и разрешения веб-сайтов] Для связанных доменов / сайтов введите суффикс в поле поиска (например, .foo.tv). Предостережение: когда у вас есть узел (сайт или файл cookie), выделенный щелчком, используйте только [Удалить], чтобы уничтожить определенные поддеревья. Использование [Удалить все] по-прежнему приведет к удалению файлов cookie для всех сайтов, выбранных поиском, и потеря сеанса отладки.


1

Добавлен trim () к ключу в объекте и назовите его str, чтобы было более понятно, что здесь мы имеем дело со строкой.

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


0

То, о чем вы просите, возможно; но это будет работать только в определенном браузере. Для этого вам необходимо разработать приложение для расширения браузера. Вы можете узнать больше о chrome api, чтобы лучше понять. https://developer.chrome.com/extensions/cookies

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.