jquery、cookieの削除


90

JQueryを使用してCookieを削除したい。私はこれを試しました

$.cookie('name', '', { expires: -1 });

次に、ページを更新してもCookieはまだそこにあります。

alert('name:' +$.cookie('name'));

どうして?ありがとう


一部のブラウザは、ブラウザを再起動した後にのみCookieを削除します。
ZOLDIK

回答:


145

JQueryでCookieを削除するには、値をnullに設定します。

$.cookie("name", null, { path: '/' });

編集:path OPが異なるディレクトリの複数のページからCookieにアクセスし、デフォルトのパスが異なるため、Cookieにアクセスするたびにプロパティを明示的に指定することが最終的な解決策でした(これは元の質問では説明されていませんでした)。ソリューションは以下のディスカッションで発見されました。これは、この答えが正しくなかったにもかかわらず受け入れられた理由を説明しています。

一部のバージョンのjQ Cookieでは、上記のソリューションはCookieを文字列nullに設定します。したがって、Cookieは削除されません。代わりに、下記のコードを使用してください。

$.removeCookie('the_cookie', { path: '/' });

しかし、ここでソースから:plugins.jquery.com/files/jquery.cookie.js.txtif (value === null) { value = '';options.expires = -1;}、彼らは同じことを行うことになっているので、何が、処理関数内部に入ること。(パラメーターは(name, value, options)
aularon

9
Cookie設定コードとテストコードは同じページにありますか?そうでない場合は、pathデフォルトで現在のページのパスに設定されるため、両方のコマンドのオプションでを明示的に設定する必要があります。:クッキーを読み書きされるすべての場所で、両方のドメインのルートに設定することにより、テスト$.cookie('name', value, {path:'/'})
チャドウィック

1
チャドウィック>たぶんあなたは正しい。exmの場合。site.comでcookieを設定してから、site.com / user、site.com / user / mod、site.com / user / mod / newにアクセスすると、このすべてのページにcookieが表示されます。次のように、パスのように見える必要があります:{path: '/'}?
user319854

2
このコードはCookieを削除しませんが、その値にnullを設定します。
Tomzan

12
これは実際にはCookieを削除しないため、-1。$.removeCookie('cookie_name')します。
Rosdi Kasim 2013

71

あなたはこれを試すことができます:

$.removeCookie('the_cookie', { path: '/' });

ソース:https : //github.com/carhartl/jquery-cookie#readme


ええ..私はそれで大丈夫です

サブドメインを使用するときは、それを指定する必要がある場合もあります。特に、ドメイン名の先頭にピリオドが必要な場合があるため(.www.example.com)
Alexis Wilke

これは、コードが何らかの理由で別の関数に入る必要がある場合には機能しませんでした。上記の$ .cookie( 'name'、null)の方が信頼性が高いようです。ただし、これによりCookieが削除される場合があります。
リゲマー2014年

これが本当の答えです!
カラシュニ2015

15

jquery.cookieプラグインを使用せずにCookieを削除することもできます。

document.cookie = 'NAMEOFYOURCOOKIE' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';

4

それはクッキーの誤解の問題です。ブラウザは、キーだけでなくオプションのパスとドメインも比較してCookie値を認識します。そのため、ブラウザは、サーバー設定オプション(path = '/'; domain = 'mydomain.com')でキーが「名前」であるCookie値と、オプションなしで「名前」である異なる値を認識します。



1

が設定されたときにのみ私のために働いたpath、すなわち:

$.cookie('name', null, {path:'/'})

反対票を投じると、私の回答をコピーしてあなたの回答として貼り付けます
Otto Kanellis 2015

1
@OttoKanellisなので、承認された回答も却下し(回答は私の回答の後に編集されたため)、回答も却下することをお勧めします(パスパラメータの重要性を強調していないため)。
Andron、2015

-3

あなたがやっていることは正しいです、問題はどこか別のところにあります。例えば、リフレッシュ時にクッキーがどういうわけか再び設定されています。


4
このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
Uri Agassi 14年

このまさに答えに対して、私が言っているのは、OPがそれを正しい方法で行っているということです。OPコードをコピーして貼り付けることは冗長であり、別のコードを追加することは読者を混乱させるでしょう。上にスクロールして、OPの動作を確認できます。ここが「重要な部分」です。ただし、何かを含める方が良いと思われる場合(どうやら一部の人はそうするのです...そのうちの1人が私の回答に反対票を投じただけです:))、回答を編集して修正します。よろしくお願いします
aularon 2014年

リンクの問題は、リンクが「回転」する傾向があることです。つまり、リンクが変更され、移動し、消えます(適切な場合-リンクはすでに無効です)。そのため、リンクから関連するテキストを引用することをお勧めします。そのため、回答は自己完結型になります(meta.stackexchange.com/questions/8231/…参照
Uri Agassi

私はそのことをよく承知していますが、ここでもそうではありません。上記の回答全体は、「あなたがやっていることは正しいですが、問題はどこか他の場所にあります。たとえば、リフレッシュ時にCookieがなんらかの理由で設定される」と書き換えることができます。繰り返しになりますが、リンクの腐敗は問題です。リンクの横にある答え自体が方法です。この回答とは無関係です。
aularon 2014年

したがって、回答に1つのリンクが含まれていて、そのリンクが停止している場合でも、回答が不十分であるとは限りません。いくつかのリンクは追加の詳細を提供するためにそこにありますが、回答を完全にするために必要ではありません。この動作は、コンテキストリンクが提供されていることを理解するための基本的なNLPを持たない、正しくプログラムされていないボットのように思えます。おそらくこれをやめる必要があります。
aularon 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.