Подтвердить что ты не робот

Чтение даты истечения срока действия cookie

Можно ли прочитать дату истечения срока действия cookie с помощью JavaScript?

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

Другой способ сделать это - записать дату истечения срока действия в куки файла 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'
});

Ответ 5

Если у вас есть контроль над кодом, в котором установлен файл 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

Ответ 6

Существует обходной вопрос для OP, если вы также контролируете настройку файлов 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>