Уничтожить 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