名前でCookieを削除しますか?


151

名前が付いた特定のCookieを削除するにはどうすればよいroundcube_sessauthですか?

次のようにすべきではありません。

function del_cookie(name) {
    document.cookie = 'roundcube_sessauth' + 
    '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
} 

その後:

<a href="javascript:del_cookie(name);">KILL</a>

roundcube_sessauthクッキーを殺す?


1
name?その意味は何ですか?それとも、Cookie名を指定できる、より用途の広いバージョンからの二日酔いですか?
paxdiablo

それはだまされているとは思わないでください。具体的には、すべての Cookieのクリアについて質問します。
paxdiablo

1
すべてのCookieを削除したくない... 1つだけ。私はぐるぐる回って基本的なコードを見つけました。そしてもちろん試しました。@Paxdiabloクッキーに名前を付けるためにそれを想定しましたが、完全に間違っているかもしれません。
チャーリー、

@paxdiablo - ...How can I delete a specific cookie
デレク朕會功夫

1
@デレクら、あなたは誤解しているようです。私はGabeからの提案されただましはすべての cookieの削除について尋ねられ、この質問は特定の cookieの削除について聞かれるので、まったくだまされたものではなかったと述べていました。私はこの質問について不満を言っていませんでした :-)
paxdiablo

回答:


252

正しいCookieを確実に削除するために、Cookieが存在するパスを定義する必要があります。

function set_cookie(name, value) {
  document.cookie = name +'='+ value +'; Path=/;';
}
function delete_cookie(name) {
  document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

パスを指定しない場合、ブラウザは現在表示しているページに対して相対的なCookieを設定するため、別のページでCookieを削除しても、他のCookieは存続します。

@Evan Morrisonのコメントに基づいて編集します。
場合によっては、正しいCookieを識別するために、Domainパラメーターが必要になることに注意してください。
通常はとして定義されDomain=.yourdomain.comます。ドメイン名の前にドット
配置すると、このCookieが任意のサブドメインに存在する可能性があります(サブドメインとしてもカウントされます)。 www

また、@ RobertTの回答で述べたようHttpOnlyに、クライアント側のJavaScript ではCookieを削除できません。


23
これは私を狂わせました!Path = /を追加した後、削除することができました。ありがとう!
duyn9uyen 2014

12
これは正しい答えであるはずPathです。ほとんどの場合、これがなければ機能しません。
SuperMarco

9
パスと正しい 'Domain = value;の両方を追加するまで、Cookieを削除できませんでした。'...したがって、私のステートメントは次のとおりでした:document.cookie = "cookieName =; path = /; expires = Thu、01 Jan 1970 00:00:01 GMT; domain = .myDomain.com"
Evan Morrison

1
このソリューションは引き続き機能しますが、そのMax-Age=0ようなことに関心がある場合は、を使用して少し簡潔に記述できます。
MaxPRafferty 2017年

181

Cookieを削除するには、expires日付を過去の日付に設定します。これを行う関数があります。

var delete_cookie = function(name) {
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
};

次に、roundcube_sessauthdo という名前のCookieを削除します。

delete_cookie('roundcube_sessauth');

1
これ機能しているように見えますが(機能するように見えます:D!)、Firefoxで自分のページによって設定されたCookieを表示しています。[KILL]ボタンをクリックしても、Cookieは削除されません。なぜだと思いますか?
チャーリー

これはGoogle Chromeで機能します。firebugをインストールして、エラーがないか確認します。

1
エラーはありません。RoundcubeでCookieを削除するだけではないようです。それはおそらく他のクッキーをうまく削除します。
チャーリー

39
この質問への回答を探しているユーザーは、以下の回答を参照してください。path=/キーは、ブラウザの互換性のために重要です。
bencripps 2015年

2
この答えは、Chromeではうまくいきませんでした。Firefoxでは試していません。しかし、下のemiiの答えはうまくいきました。
ダニエルF

11

// exMins = 0を渡した場合、作成するとすぐに削除されます。

function setCookie(cname, cvalue, exMins) {
    var d = new Date();
    d.setTime(d.getTime() + (exMins*60*1000));
    var expires = "expires="+d.toUTCString();  
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

setCookie('cookieNameToDelete','',0) // this will delete the cookie.

この例ではexMinsは定義されていません。おそらくexdaysを意味します
bhurlow

ええ..代わりにexdaysの引数の名前をexMinsに変更します..感謝#BhBh
Kishor Patil

7

それがMay '12のRoundcubeバージョンの状況であったかどうかは本当にわかりませんが、現在のバージョンroundcube_sessauthでは、JavaScriptとしてマークされているため、JavaScriptからCookieを削除できないという答えがありますHttpOnly。これは、JSクライアント側のコードからはアクセスできず、サーバー側のスクリプトまたは直接のユーザーアクション(統合デバッガーやプラグインなどのブラウザー機構を使用)によってのみ削除できることを意味します。


1

あなたはこの解決策を試すことができます

var d = new Date();
d.setTime(d.getTime());
var expires = "expires="+d.toUTCString();
document.cookie = 'COOKIE_NAME' + "=" + "" + ";domain=domain.com;path=/;expires=" + expires;

0

私の場合、異なる環境でブローコードを使用しました。

  document.cookie = name +`=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;Domain=.${document.domain.split('.').splice(1).join('.')}`;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.