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する方法を見つけていません。
任意の提案をいただければ幸いです。
HTTP仕様に従ってCookieを削除する方法はありません。 Cookieを効果的に「削除」するには、有効期限を過去の日付に設定します。基本的に、これはあなたのために以下をもたらします(cookiesモジュールのドキュメントによると):
_cookies.set('testtoken', {maxAge: Date.now()});
_
または、HTTP仕様に従って:
_cookies.set('testtoken', {expires: Date.now()});
_
両方とも機能するはずです。本当に古い日付の場合、Date.now()
をnew Date(0)
に置き換えることができます。
Webappの場合、応答としてCookieを次のように設定できます。
res.cookie("key", value);
クッキーを削除するには:
res.clearCookie("key");
私はこれを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('/');
});
[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: '/' });
お役に立てれば!!!
他の答えは正解ですが、express.js webappからCookieを削除するには、次のメソッドを呼び出します。
res.clearCookie("key");
Cookieオプション(有効期限を除く)は、設定時と同じである必要があります。それ以外の場合、ブラウザはCookieを削除しません。したがって、同じドメイン、セキュリティ設定などを使用します(参照: https://expressjs.com/en/4x/api.html#res.clearCookie )
私は数日前に同じ問題を経験していました。友人と議論した後、これが最善の解決策だと思います。
res.setHeader('set-cookie', 'mycookie=; max-age=0');
利点:
クレジット:@andy
私もcookie-parser
を使用していますが、上位の回答が解決策につながります。私の場合、overwrite: true
も追加する必要がありました。それ以外の場合は、新しいCookieキーが追加されました。
だから私の最終的な解決策は次のようになります:
res.cookie('cookieName', '', {
domain: 'https://my.domain.com',
maxAge: 0,
overwrite: true,
});