2015-01-16 2 views
14

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

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); 

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

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

+1

В модуле, который вы связали, не существует метода, но [установка срока действия файла cookie в прошлом] (http://stackoverflow.com/questions/5285940/correct-way-to-delete-cookies-server-side) ('expires: new Date (0)') должно аннулировать файл cookie. –

+0

Спасибо @JonathanLonowski, это помогло. – Manwal

ответ

9

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

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

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

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

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

+0

Существуют определенные случаи, когда cookie необходимо уничтожить на основе триггеров уровня пользователя и уровня приложения, где нам нужно уничтожить cookie. – vashishatashu

+2

@vashishatashu Я не уверен, что вы пытаетесь сказать. Нет никакой разницы между «уничтожением» файла cookie или установкой его даты истечения срока действия, который уже прошел. Это то же самое. Прочтите спецификацию HTTP для получения подробной информации о механизмах cookie или используйте свой любимый язык для «уничтожения» файла cookie и посмотрите на заголовки в ваших инструментах разработки (обратите внимание на Set-Cookie). –

+1

Это должен быть правильный и принятый ответ. – RavenHursT

33

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

res.cookie("key", value); 

и удалить куки:

res.clearCookie("key"); 
+0

Это лучшее решение. Но, это по-другому? не используя cookie. Его просто «ключ» под названием «cookie» для ответа. Мне нужно получить более безопасный метод аутентификации. – Manwal

+4

Это достоверно и хорошо документировано здесь: http://expressjs.com/en/api.html#res.clearCookie – Raptor

+0

Это не отправляет ничего обратно клиенту, и в результате клиент не удаляет их файлы cookie , – Michael

5

Я использую это с 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('/'); 
}); 
2

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

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

Лучшая идея будет недействительность печенья, установив значение опорожнить и включает в себя поле истекает, а, как показано ниже:

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: '/' }); 

Надеется, что это помогает !!!

+0

. В моем случае мне также необходимо было добавить опцию домена. Спасибо – ido

3

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

res.clearCookie("key");

Но есть один нюанс!

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

+0

Боюсь, я не понимаю твое предложение? Удаление cookie не обновляет параметры? Но параметры должны быть такими же, как и установленный файл cookie, иначе cookie не будет удален. –

+0

@ Manwal это не имеет значения. Дело в том, что вы должны ВКЛЮЧАТЬ те же самые параметры. Если вы пропустите один вариант, файл cookie не будет удален. –

+0

Неправильное использование. При использовании clearCookie вам не нужно передавать какие-либо опции. – Incinerator

Смежные вопросы