Уничтожить cookie NodeJs

Я использую модуль Cookies для настройки cookie. Вот следующий мой код:

var options = {
    maxAge: ALMOST_ONE_HOUR_MS,
    domain: '.test.com',
    expires: new Date(Date.now() + ALMOST_ONE_HOUR_MS)
};
var value = userInfo.token;
cookies.set("testtoken", value, options);

Но в документации я не нашел, как уничтожить этот cookie.

Любое предложение будет оценено.

Ответы

Ответ 1

Невозможно удалить файл cookie в соответствии со спецификацией HTTP. Чтобы эффективно "удалить" файл cookie, вы устанавливаете дату истечения срока действия в прошлом. По сути, это приведет к следующему для вас (согласно документации модуля cookie):

cookies.set('testtoken', {maxAge: Date.now()});

Или в соответствии со спецификацией HTTP:

cookies.set('testtoken', {expires: Date.now()});

Оба из них должны работать. Вы можете заменить Date.now() на new Date(0) на действительно старую дату.

Ответ 2

Для webapp вы можете просто установить cookie в ответ как:

res.cookie("key", value);

и удалить файл cookie:

res.clearCookie("key");

Ответ 3

Чтобы удалить любой http файл cookie, если мы просто попытаемся очистить его от ответа [используя res.clearCookie("key")], он определенно не сработает. На самом деле, для удаления http cookie, домена и пути очень важны.

Домен и путь определяют объем файла cookie. На первый взгляд, они по сути говорят браузеру, на каком веб-сайте принадлежит файл cookie. Отправка одного и того же значения cookie; истекает, добавлено также плохой идеей, так как вы хотите, чтобы содержимое было уничтожено, но этого не произойдет.

Лучшей идеей было бы аннулирование cookie, установив значение пустым и включающее поле expires, как показано ниже:

res.cookie("key","empty the key content", {expires:old date, domain:'.example.com', path:'/'});

res.cookie("token", "", { expires: new Date(0),domain:'.test.com', path: '/' });

Надеюсь, это поможет!!!

Ответ 4

Я использую это с модулем cookie-parser:

router.get('/logout', function(req, res){
    cookie = req.cookies;
    for (var prop in cookie) {
        if (!cookie.hasOwnProperty(prop)) {
            continue;
        }    
        res.cookie(prop, '', {expires: new Date(0)});
    }
    res.redirect('/');
});

Ответ 5

Хотя еще один ответ правильный, удаление файла cookie из веб-приложения express.js выполняется с помощью следующего метода:

res.clearCookie("key");

Но есть предостережение!

Ваши параметры cookie (за исключением срока действия) должны быть такими же, как и при его установке. В противном случае браузеры НЕ удалят куки. Поэтому используйте тот же домен, настройки безопасности и т.д. (Ссылка: https://expressjs.com/en/4x/api.html#res.clearCookie).

Ответ 6

Я также использую cookie-parser, и верхние ответы приводят меня к решению. В моем случае мне нужно было также добавить overwrite: true, иначе был добавлен новый ключ cookie.

Итак, мое окончательное решение выглядит так:

res.cookie('cookieName', '', {
      domain: 'https://my.domain.com',
      maxAge: 0,
      overwrite: true,
    });

Ответ 7

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

res.setHeader('set-cookie', 'mycookie=; max-age=0');

Преимущества:

  • использовать только узел
  • просто понять

кредиты: @andy