Вероятно, вы можете использовать AOP для создания своего рода Aspect, который кэшировал результаты наших геттеров для настраиваемого количества времени. Это может помешать вам копировать и вставлять код шаблона в десятки аксессуаров.
Нет способа удалить куки в соответствии со спецификацией HTTP. Чтобы эффективно «удалить» куки-файл, вы устанавливаете дату истечения срока действия на некоторую дату в прошлом. По сути, это может привести к следующему (согласно документации модуля cookie):
cookies.set('testtoken', {maxAge: Date.now()});
Или согласно спецификации HTTP:
cookies.set('testtoken', {expires: Date.now()});
Оба из них должны работать. Вы можете заменить Date.now()
на new Date(0)
для действительно старой даты.
Для веб-приложения вы можете просто установить cookie в ответе:
res.cookie("key", value);
и удалить cookie:
res.clearCookie("key");
Чтобы удалить любой файл cookie http, если мы просто попытаемся удалить его из ответа [используя res.clearCookie("key")
], он определенно не будет работать. В действительности, чтобы удалить http cookie, домен и путь очень важны.
Домен и путь определяют область действия cookie. По сути, они, по сути, говорят браузеру, к какому веб-сайту принадлежит cookie. Отправка того же значения cookie с помощью; добавление expires также является плохой идеей, поскольку вы хотите, чтобы содержимое было уничтожено, но этого не произойдет.
Лучшей идеей будет сделать файл 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: '/' });
Надеюсь, это поможет !!!
Я использую это с модулем 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('/');
});
Хотя еще один ответ правильный, удаление файла cookie из веб-приложения express.js выполняется путем вызова следующего метода:
res.clearCookie("key");
Ваши параметры cookie (за исключением срока действия) должны быть такими же, как и при его установке. В противном случае браузеры НЕ удалят куки. Поэтому используйте тот же домен, настройки безопасности и т. Д. (Ссылка: https://expressjs.com/en/4x/api.html#res.clearCookie )
Я также использую cookie-parser
, и верхние ответы приводят меня к решению. В моем случае мне нужно было также добавить overwrite: true
, в противном случае был добавлен новый ключ cookie.
Итак, мое окончательное решение выглядит так:
res.cookie('cookieName', '', {
domain: 'https://my.domain.com',
maxAge: 0,
overwrite: true,
});