web-dev-qa-db-ja.com

Cookie NodeJを破棄する

Cookieを設定するために Cookies モジュールを使用しています。以下は私のコードです:

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をdestroyする方法を見つけていません。

任意の提案をいただければ幸いです。

29
Manwal

HTTP仕様に従ってCookieを削除する方法はありません。 Cookieを効果的に「削除」するには、有効期限を過去の日付に設定します。基本的に、これはあなたのために以下をもたらします(cookiesモジュールのドキュメントによると):

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

または、HTTP仕様に従って:

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

両方とも機能するはずです。本当に古い日付の場合、Date.now()new Date(0)に置き換えることができます。

17
Roel van Uden

Webappの場合、応答としてCookieを次のように設定できます。

res.cookie("key", value);

クッキーを削除するには:

res.clearCookie("key");
75
vashishatashu

私はこれを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('/');
});
7
Sandro Wiggers

[res.clearCookie("key")]を使用して応答からHTTP Cookieをクリアしようとした場合に、HTTP Cookieを削除するには、間違いなく機能しません。実際には、http cookieを削除するには、ドメインとパスが非常に重要です。

ドメインとパスは、Cookieのスコープを定義します。実際には、CookieがどのWebサイトに属しているかをブラウザに伝えます。と同じCookie値を送信する;コンテンツを破棄したいので、expires appendを追加することも悪い考えですが、それは起こりません。

最良のアイデアは、値を空に設定して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: '/' });

お役に立てれば!!!

7
Kavitha Vikas

他の答えは正解ですが、express.js webappからCookieを削除するには、次のメソッドを呼び出します。

res.clearCookie("key");

しかし、注意点があります!

Cookieオプション(有効期限を除く)は、設定時と同じである必要があります。それ以外の場合、ブラウザはCookieを削除しません。したがって、同じドメイン、セキュリティ設定などを使用します(参照: https://expressjs.com/en/4x/api.html#res.clearCookie

7
Jesper Bylund

私は数日前に同じ問題を経験していました。友人と議論した後、これが最善の解決策だと思います。

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

利点:

  • ノードのみを使用
  • わかりやすい

クレジット:@andy

1
Mark Colling

私もcookie-parserを使用していますが、上位の回答が解決策につながります。私の場合、overwrite: trueも追加する必要がありました。それ以外の場合は、新しいCookieキーが追加されました。

だから私の最終的な解決策は次のようになります:

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