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

107

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

informatik01
источник
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"
Aemkei
источник
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.

PhiLho
источник
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 для всех сайтов, выбранных поиском, и потеря сеанса отладки.

ZXX
источник
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

Эмека Августин
источник