私のWebアプリは、ユーザーがサーバーにログインしたときに、次のように応答にSet-Cookieヘッダーを追加するように作成されています。
Set-Cookie:JSESSIONID=1; Path=/myApp/; Secure
ログアウト時に、クライアント(ブラウザ)でこのCookieを削除しようとします。これは、Cookieが削除されている限り、サーバーでセッションが正常に破棄されたかどうかは関係ないためです。残っている「ゴースト」セッションは、サーバー上で時々クリーンアップされます。
しかし、私のアプリはJSESSIONIDCookieを削除できません。ログアウト関数がから呼び出され、https://test.myserver.com/myApp/app/index.html#/mySubPage
ログアウト関数が実行するとします。
delete $cookies["JSESSIONID"];
$location.path("/login");
クッキーは削除されません。Chromeデベロッパーツールの[リソース]タブにあるCookieの一覧を更新すると、Cookieがまだ残っていることがわかります。ログインページをリロードし、[リソース]タブのCookieリストを更新すると、Cookieが引き続き表示されます。
HTTPOnly CookieではないのにJavascriptクライアントからCookieを削除できないのはなぜですか?問題を引き起こしているのはパスですか?スクリプトはCookieのパスに含まれるページで実行されているため、そうではありません。クッキーは普通に扱うのはそれほど難しいことではないので、私がここで見落としている些細なことがあるかもしれないことを私はよく知っています-しかしどんな助けでも大いに感謝されます。
アップデート:
元の投稿でアプリに間違ったパスを指定していました。これで、正しいパスを反映するように編集されました(まあ、抽象的に)。これは質問にとって重要な情報であることがわかりました。AngularJSは、作成/削除するすべてのCookieのパス属性としてアプリの完全な相対パスを使用します。サーバーがCookieをのパスで設定し/myApp/
、アプリがの相対パスで実行されていたため/myApp/app
、Angularは前者を削除しようとしました。存在しないCookie(既存のCookieを上書きまたは削除するには、名前、ドメイン、およびパスがすべて、Cookieの作成時に使用されたものと同じである必要があります)。