質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

13577閲覧

javaでCookie削除

退会済みユーザー

退会済みユーザー

総合スコア0

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/08/07 16:28

サーバサイド(Java)でCookieを削除する処理を実装していますが、
削除できていないためソースに不備がありましたらご教示願います。

ログイン機能で、「Login」「Logout」「CheckCookie」のボタンがあります。
JavaScriptでボタン押下契機に関数からサーブレットでCookieを保存削除する流れです。

Cookie削除後にブラウザのデバッグツールでCookieを確認すると、
消えておらず、原因がわかりません。

参考:
http://javatechnology.net/java/cookie-create-delete/

/** * ログイン機能に関する関数 */ $(function() { /** * [概要] ログインボタン押下契機にCookie作成。 */ $('#login').click(function(){ $.ajax({ url:'MngLoginServlet', method:'get', error: function() { alert('error'); }, success: function() { alert('success'); } }); }); /** * [概要] ログアウトボタン押下契機にCookie削除。 */ $('#logout').click(function(){ $.ajax({ url:'MngLoginServlet', method:'post', error: function() { alert('error'); }, success: function() { alert('success'); } }); }); /** * [概要] Cookieを表示確認 * [詳細] 現在保存されているCookie表示。 */ $('#cookieCheck').click(function(){ alert(document.cookie); }); });
package mng; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * <p>[概要]ログイン画面でボタン押下契機にCookieを作成、削除する</p> */ @WebServlet("/MngLoginServlet") public class MngLoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public MngLoginServlet() { super(); } /** * <p>[概要]ログインボタン押下契機にCookie作成</p> */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie cookie = new Cookie("TestCookie", "1000"); cookie.setMaxAge(60 * 30); cookie.setPath("/"); cookie.setSecure(false); response.addCookie(cookie); } /** * <p>[概要]ログアウトボタン押下契機にCookie削除</p> */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie cookies[] = request.getCookies(); for ( Cookie cookie : cookies) { if ("TestCookie".equals(cookie)) { cookie.setMaxAge(0); cookie.setValue(""); cookie.setPath("/"); response.addCookie(cookie); } } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

java

1if ("TestCookie".equals(cookie.getName())) {

if内に入ってないのかと思います。
getNameして比較すれば大丈夫かなと。違ってたらすみません。

投稿2017/08/08 01:50

編集2017/08/08 01:55
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/16 15:55

ご回答ありがとうございます。 上記に修正したらできました。
guest

0

ベストアンサー

login処理はHTTPのメソッドがgetになっていますのでキャッシュを見ることがありそうな気がします。

jQueryのajaxの設定で、下記のどちらかを設定したらどうでしょうか?
cacheプロパティにfalseを設定する
or
HTTPメソッドをPOSTにする

投稿2017/08/22 03:30

kitaji0306

総合スコア176

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/23 16:24

ご回答ありがとうございます。 ご教示いただいた設定でできました。 ありがとうございます。 質問ですが、 getだとキャッシュを見に行き、postだとキャッシュへ見に行かないのでしょうか。 getにすべき処理とpostにすべき処理の使い分けがいまいち区別できません。 自分の認識では、 post:パスワードなどURLから見られたくない情報を送る処理 get:URLからパラメータを取得する処理 というよう使い分けるのかと思っているのですが、 使い分けのポイントなどありますでしょうか。
kitaji0306

2017/08/23 22:33 編集

> getだとキャッシュを見に行き、postだとキャッシュへ見に行かないのでしょうか。 getでも、キャッシュしないようにHTTPヘッダに記載すればキャッシュされません。  (最近のブラウザはそこらへんは、きちんと判断してくれると思います。) postをキャッシュしてしまうブラウザは、ほとんどないと思います。 getとpost完璧な使い分け方があるわけではないと思いますが、参考までに下記のような分け方が分かりやすいのではないでしょうか? post:URLで見られる見られない関係なくパラメータを送信する処理 get:同じURL(クエリストリング=パラメータ含む)なら基本的に同じ結果を返す処理=クライアントはローカルのキャッシュ使ってもいいよな処理 →キャッシュしてほしくなければ、HTTPヘッダや、クエリストリングに個別のパラメータ(例えば現在日時のようなもの)を付けて、毎回違うURLと判断されるように工夫するなどが必要 もっと細かく議論しようとすると、冪等性や副作用の話とかが出てきますので、上記くらいがライトでいいかと思います。 参考:http://blog.ruedap.com/2011/03/25/http-method-post-put-idempotence
退会済みユーザー

退会済みユーザー

2017/09/05 12:13

ご回答ありがとうございます。 getの場合、キャッシュをしない設定をすることが必要ですね。
guest

0

Cookie削除後にブラウザのデバッグツールでCookieを確認すると、消えておらず、原因がわかりません。

ブラウザが何でどのタイミングで見ているのか分かりませんが、普通ブラウザがクッキーを削除するのは「ログアウトボタン押下契機にCookie削除」の応答で有効期限の切れた Cookie を受け取った時点ではなくて、次に要求を出す時だと思うのですが。

なので、例えば、「ログアウトボタン押下契機にCookie削除」の応答で同じページにリダイレクト指示を出して、ブラウザがリダイレクト指示に従い要求を出す(その際 Cookie を削除する)ようにする必要があるのではないかと思います。

ASP.NET のフォーム認証はそういう仕組みになっていますが(以下、ご参考まで)、Java は分かりませんのでハズレでしたらすみません。

Forms 認証のログイン・ログオフ動作
http://surferonwww.info/BlogEngine/post/2011/08/03/Operations-of-login-and-logoff-in-Forms-authentication.aspx

投稿2017/08/07 20:59

編集2017/08/07 21:45
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/16 15:54

ご回答ありがとうございます。
guest

0

if ("TestCookie".equals(cookie.getName())) {
に修正したらできました。

ただ、Cookieを削除後にloginボタンを押下してCookieを設定しようとしたところ、
設定できませんでした。
一度削除したCookie名は再度設定できないのでしょうか?
以下手順です。

1.loginボタン押下でCookie設定
2.cookieCheckボタン押下でCookie確認 → 「TestCookie = 1000」を確認
3.logoutボタン押下でCookie削除
4.cookieCheckボタン押下でCookie確認 → Cookieがないことを確認
5.loginボタン押下でCookie設定
6.cookieCheckボタン押下でCookie確認 → 「TestCookie = 1000」を想定していたところ、Cookieがない。なぜ?

投稿2017/08/16 16:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問