Мені потрібно дістати всі файли cookie з браузера


106

Мені потрібно отримати всі файли cookie, які зберігаються в моєму браузері за допомогою JavaScript. Як це можна зробити?


5
nayagi, на жаль, якщо ми відповімо на ваше запитання, у вас було б програмне забезпечення, яке не менше, ніж MALWARE.
— Джон Лім’яп

19
@Jon Limjap - це не зовсім так. Існує законний сценарій, коли можна перерахувати всі файли cookie у веб-браузері без зловмисного програмного забезпечення.
— Франці Пенов

Зачекайте секунду. Все печиво? Вхід з будь-якого веб-сайту? Це зловмисне програмне забезпечення ...
— alexyorke

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

Відповіді:


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 /; ? / при розщепленні для їх видалення?
— Carter Cole

Перевірте цей фрагмент на розбір document.cookies(з книги O'Reilly).
— Bentley4

слід дійсно додати .trim () до пари [0], щоб переконатися, що немає провідних пробілів.
— Ендрю Кіллен

37
  1. Ви не можете бачити файли cookie для інших сайтів.
  2. Ви не можете бачити HttpOnlyфайли cookie.
  3. Усі файли cookie, які ви можете бачити, знаходяться у document.cookieвластивості, яка містить розділений крапкою з комою список name=value.

27

Ви не можете. Конструюючи, з метою безпеки, ви можете отримати доступ лише до файлів cookie, встановлених вашим сайтом. StackOverflow не бачить файлів cookie, встановлених UserVoice, ані тих, які встановлює Amazon.


5
як це робив facebook ...? Я завжди бачив у фейсбуці шоу оголошень, пов’язаних із тим, що я переглядав у Google!
— Арі

16
Власне, Facebook встановлює власні файли cookie на кожному сайті ... за допомогою своєї кнопки Like. Б'юсь об заклад, що Google робить те саме на кнопках +1 або навіть на скриптах статистики сайту.
— PhiLho

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

2
@SoursopTree - Чи не це AdChoices? Facebook використовує AdChoices - службу Google, яка відображає вміст на основі ваших пошукових запитів через Google. Stackoverflow також використовує AdChoices. Я можу трохи розібратися в точних подробицях - але я б здогадався, що це саме ви думаєте.
— Рік

1
@KeepMove цю термінологію ми називаємо синхронізацією файлів cookie
— ericdemo07

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)

Меню гайкового ключа (інструмента): Параметри / Під The ​​Hood / [Показати файли cookie та дозволи веб-сайту] Для пов’язаних доменів / сайтів введіть суфікс у поле пошуку (наприклад, .foo.tv). Caveat: якщо у вас є вузол (сайт або cookie), виділеним клацанням, використовуйте лише [Remove] для вбивства конкретних підкреслень. Використовуючи [Видалити все], все одно буде видалено файли cookie для всіх веб-сайтів, вибраних шляхом пошуку, і витратити ваш сеанс налагодження.


1

Додано ключ trim () до ключа в об’єкті та назвемо його str, тому було б зрозуміліше, що ми маємо справу з рядком.

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


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.