Чтение даты истечения срока действия куки - PullRequest
46 голосов
/ 07 октября 2009

Можно ли прочитать дату истечения срока действия куки, используя JavaScript?

Если да, то как? Если нет, есть ли источник, на который я могу посмотреть?

Ответы [ 6 ]

51 голосов
/ 07 октября 2009

Невозможно получить дату истечения срока действия куки через Javascript; только пары ключ-значение отображаются через document.cookie.

8 голосов
/ 24 сентября 2014

Если вы используете Chrome, вы можете перейти на вкладку «Приложение» (в Инструментах разработчика) и найти пункт «Cookies» на левой боковой панели. Оттуда выберите домен, для которого вы проверяете установленный файл cookie, и он выдаст вам список файлов cookie, связанных с этим доменом, вместе с датой их истечения.

2 голосов
/ 07 октября 2016

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

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

Стоит помнить, что по прошествии некоторого времени браузер не будет сообщать о том, что файл cookie доступен. Браузер может показать наличие куки, но когда JS попытается получить к нему доступ, он тоже не сможет.

Кроме того, я обнаружил, что панель инструментов WebDeveloper в Firefox показывает файлы cookie, которые прошли, но в Firefox> Настройки конфиденциальности они обновлены правильно.

0 голосов
/ 23 сентября 2018

Существует обходной вопрос для ОП, если вы также контролируете настройку файлов cookie. Я делаю это так:

function setCookie(name, value, expiryInDays) {
  const d = new Date();
  d.setTime(d.getTime() + expiryInDays * 24 * 60 * 60 * 1000);

  document.cookie = `${name}=${value}_${d.toUTCString()};expires=${d.toUTCString()}`;
}

function showCookies() {
  if (document.cookie.length !== 0) {
    const allCookies = document.cookie.split(/;\s*/);
    const wrapper = document.getElementById('allCookies');

    wrapper.innerHTML = allCookies.reduce((html, cookie, index) => {
      const cookieParts = cookie.split('=');
      const cookieValueParts = cookieParts[1].split('_');
      const cookieHtml = [
        `<b>${index + 1}</b>`,
        `Cookie name: ${cookieParts[0]}`,
        `Cookie value: ${cookieValueParts[0]}`,
        `Expires: ${cookieValueParts[1] || 'unknown'}`
      ].join('<br>');
      return html + `<p>${cookieHtml}</p>`;
    }, '');
  }
}
<button onclick="showCookies()">Show me the cookies!</button>
<div id="allCookies"></div>
0 голосов
/ 23 мая 2018

Если у вас есть контроль над кодом, в котором установлен файл cookie, вы можете добавить код, чтобы сохранить дату окончания срока действия в локальном хранилище браузера для последующего получения. Например:

// set cookie with key and value to expire 30 days from now
var expires = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000);
document.cookie = [
    "key=value",
    "expires=" + expires.toUTCString()
].join("; ");

// store cookie expiration date for key in local storage
if (window.localStorage) {
    localStorage.setItem("keyExpires", expires.toISOString());
}

Позже вы можете искать, когда срок действия файла cookie истекает в локальном хранилище. Например:

var expires = localStorage.getItem("keyExpires");

Локальное хранилище в настоящее время имеет широкую поддержку.

https://caniuse.com/#feat=namevalue-storage

0 голосов
/ 19 апреля 2017

Еще один способ сделать это - записать дату истечения срока действия в текст файла cookie, а затем перечитать его оттуда для последующих перезаписей. Я получил это для работы с фантастической библиотекой js-cookies .

Настройка выглядит так:

// Set cookie expiration as a number (of days)
var paywallDuration = 30;

// When you set the cookie, add the `expires` key/value pair for browsers
// Also add `expirationDate` key/value pair into JSON object
Cookies.set('article-tracker', {
  expirationDate : paywallDuration,
  totalArticlesRead: 1
}, {
  expires : paywallDuration,
  domain : 'example.com'
});

С этим методом можно легко прочитать и переписать файл cookie. Используйте метод js-cookie getJSON(), чтобы прочитать дату окончания срока действия, которую вы установили. Затем дважды используйте эту дату при переписывании cookie-файла - снова в объекте JSON, а затем для браузера с expires:

var existingPaywallDuration = Cookies.getJSON('article-tracker').expirationDate;

Cookies.set('article-tracker', {
  expirationDate: existingPaywallDuration,
  totalArticlesRead: 4
}, {
  expires : existingPaywallDuration,
  domain : 'example.com'
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...