• ベストアンサー

javaでのcookieについて

こんばんわ&こんにちわ! javaでcookieを使った処理をしたいのですが ちぇっとよくわかりません。 作成したはずのcookieが 追加  response.addCookie(cookie);  取得 cookie.getValue(); 取得しても1つ前の値が取得されてしまいます。 基本的な事なのかもしれませんが、理解できずに 困っています。 詳しい方がいらっしゃったら説明をお願いできませんか。 よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>javaでのcookie操作に関する参考HPなどありましたら 教えて頂けませんか? まずはcookieの仕組みについて調べられてはどうでしょうか?別にJAVAに関連したものでなくてもいいと思いますよ。 >responseがブラウザに送られるタイミングが よくわからなくて。。。 responseはそのセッション(出力)がフラッシュされた時点で送信されますが、ブラウザがcookieの値の保持を行うのはリクエスト処理が終了された時です。その後に再度リクエストが送られてくるcookieに設定された値が送信されます。ですのでresponseにcookieをセットしても即ブラウザに送信されるわけではなく、クライアントのcookieの値も書き換えが行われるわけではありません。 おそらくその辺を誤解されているのだと思いますよ。

jk_beck
質問者

お礼

まだまだ、勉強も経験もたりなので もっといろいろと調べてみます。 ご回答、ありがとうございました。

その他の回答 (1)

回答No.1

もしかして、cookieをaddしてすぐにgetで確認をしているのではないでしょうか? そうであるならば、一度cookieについて勉強されるほうがいいと思います。 cookieの値はresponseにセットした後にクライアントのブラウザへと返信し、再度リクエストが送られた時に初めて値として取得できます。ですので、一つ前の値が取得できるのは仕様どおりです。 cookieというのは単に値を格納するための器ではないのですから。

jk_beck
質問者

お礼

ご回答ありがとうございます。 サーブレットでの処理なのですが、cookie操作 は難しいですね。。

jk_beck
質問者

補足

javaでのcookie操作に関する参考HPなどありましたら 教えて頂けませんか? responseがブラウザに送られるタイミングが よくわからなくて。。。

関連するQ&A

  • Cookieが反映されない

    Servletで設定したCookieをJSPで取得できないのです。 具体的には (1)Servletクラスで↓のようにresponseに対してaddCookieを行います。 Cookie cookie = new Cookie("key", "KEY"); cookie.setMaxAge(-1); // ブラウザが終了するまで有効 HttpServletResponse response.addCookie(cookie); (2)nextPage.jspにホワードします。 HttpServletRequest req; HttpServletResponse res; ServletContext context = this.getServletContext(); RequestDispatcher rd =context.getRequestDispatcher("nextPage.jsp"); rd.forward(req,res); (3)nextPage.jspでCookieを取得 Cookie cookies[] = request.getCookies(); String name = cookies[0].getName(); String value = cookies[0].getValue(); 以下の方法でServletで書き換えたCookieが取得できません、もっと具体的に言うと1つ前のCookieの状態が取得されてしまいます。(最新のCookie情報が取得できない) というような状況です。 皆様よきアドバイスを。。。

  • COOKIEの扱いについて

    いつもお世話になっています。 現在のプロジェクトでCOOKIEの値を利用する機能があって つまずいてます(ToT) やりたい事は 1:特定ページアクセスにアクセスされたらCookieをセット 2:別のページ内に<script src="Cookieセットしたサーバー"></script> を埋め込んでCookieをセットしたサーバーでCookieの値を取得. FIREFOXですと2の段階でもCookieの値を取得できるのですが IEですとCookieが取得できません。 ブラウザの仕様or設定の問題かとおもいますが困っているので よろしくお願いしますm(__)m

  • cookieを受け入れたかどうかをリロード前に知りたい

    いつもお世話になっております。 かなり困っているのですが、cookieが配信されたかどうかをリロード前に取得する事は可能でしょうか? 現在cookieの配信と同時に、配信したIDをDBに入れる処理をしているのですが、cookieの受け入れを許可していないユーザが多いようで、無駄にデータがたまってしまっています。 可能であれば、cookieが配信できたかどうかをDBへ入れる前に取得して、処理を分けたいと思っているのですが・・・。 こういった構造自体が根本的によろしくないのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • セレクトメニューをキーにCookieを取得したいんですが

    お世話になっています。 今、NN4.7を使ってDBの構築をしています。 データのやり取りでcookieを利用としているのですがネスケだとJavascriptエラーが出てしまいます。 どこがまずいのかどなたか見ていただけないでしょうか?ちなみにIEだとうまくいくのですが。。。 function getValue(nm){ n = nm.selectedIndex; //値を取得する var va1 = menu.text1.value; var va2 = menu.text2.value; //クッキーに書き込む setCookie("text1",va1); setCookie("text2",va2); } <html>・・・・ <select name="text2" onChange="getValue(this)"> という感じで組んでは見たのですが。 あと、これは、text1とtext2というフィールドがあり、text2の選択メニューから一つ選ばれたのをキーとしてcookieを取得しようとしています。 よろしく、お願いいたします。

  • Cookieへの保存

    ログイン認証システムを作成しCookieを利用しようと思うのですが Cookieへデータが保存されません。 ちなみにCookie用に付け加えたソースは ModelBean.javaで // クッキー処理 public int selectDatas(){ int userNo=0; jdbcOpen(); try{ // SQL文生成 query = "SELECT userNo FROM loginUser"; // 実行 ResultSet rs = stmt.executeQuery(query); // 結果取得 if(rs.next()){ this.userNo = rs.getInt("userNo"); } rs.close(); } catch (Exception ex) { ex.printStackTrace ();} jdbcClose(); return userNo; } ControllServlet.javaでは import myPackage.ModelBean; //サーブレット関連のクラス import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //Struts関連のクラス import org.apache.struts.action.Action; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionError; //Java関連のクラス import java.io.IOException; import java.util.ResourceBundle; //Log4j関連のクラス import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; public class ControllerServlet extends Action { // 設定ファイル private static final String APPLICATION_RESOURCE = "res.ApplicationResources"; // リソースの読み込み private static ResourceBundle rb = ResourceBundle.getBundle(APPLICATION_RESOURCE); // Log4jの設定 static Logger logger = Logger.getLogger(ControllerServlet.class); public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException , Exception { Cookie[] cookies = request.getCookies(); Integer userNo = null; if (cookies != null) { for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if (cookie.getName().equals("userNo")) { String value = cookie.getValue(); userNo = Integer.valueOf(value); break; } } } if (userNo == null) { userNo = new Integer(0); } userNo = new Integer(userNo.intValue() + 1); Cookie cookie = new Cookie("userNo", userNo.toString()); //cookie.setMaxAge(0); response.addCookie(cookie); です。どのようにしたら保存されるようになるのでしょうか? よろしくお願いします。

  • cookie使用サイトへのJAVAによるアクセス

    JAVAであるサイトの情報を集めるようなソフトを作りたいのですが、 そのサイトが年齢認証をcookieで行っているみたいで接続しても403エラーが出てしまいます。 cookieを手動で設定していますがこれはあってるはずです。 afg = 0; domain = "www.toranoana.jp" ;path = "/"; どのようにすればちゃんと接続できるようになるでしょうか?よろしくおねがいします。 以下にソースをさらします。 なお接続先は18歳未満禁止の年齢制限がかかっているので注意してください。 import java.net.*; import java.io.*; import java.util.*; public class HttpClientHttpURLConnection { public static void main(String[] args) throws MalformedURLException, ProtocolException, IOException, URISyntaxException{ URL url = new URL("http://www.toranoana.jp/mailorder/cot/pagekit/0000/00/03/000000030983/index.html"); URI uri = new URI("www.toranoana.jp/"); HttpCookie cookie = new HttpCookie("afg", "0"); cookie.setDomain("www.toranoana.jp"); cookie.setPath("/"); HttpURLConnection urlconn = (HttpURLConnection)url.openConnection(); urlconn.setRequestMethod("GET"); urlconn.setInstanceFollowRedirects(false); urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3"); CookieManager manager = new CookieManager(); manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); manager.getCookieStore().add(uri,cookie); CookieHandler.setDefault(manager); CookieStore store = manager.getCookieStore(); List<HttpCookie> cookies = store.getCookies(); for (int i = 0; i < cookies.size(); i++) { HttpCookie cookie1 = cookies.get(i); System.out.println("Cookie[" + i + "]: " + cookie1); } urlconn.connect(); Map headers = urlconn.getHeaderFields(); Iterator it = headers.keySet().iterator(); System.out.println("レスポンスヘッダ:"); while (it.hasNext()){ String key = (String)it.next(); System.out.println(" " + key + ": " + headers.get(key)); } System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "]" + "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]"); System.out.println("\n---- ボディ ----"); BufferedReader reader = new BufferedReader(new InputStreamReader(urlconn.getInputStream())); while(true){ String line = reader.readLine(); if(line == null){ break; } System.out.println(line); } reader.close(); urlconn.disconnect(); } }

    • ベストアンサー
    • Java
  • cookie処理について

    cookieの事で質問させていただきます。 現在、本番稼動に向けて総合テストを行っています。 本番環境は、負荷分散させるためにcookieを参照し、2台で処理を振り分けています。 アプリケーション動作確認の際、自分が作成した部分をちょっといじっているとエラーが発生して落ちてしまいます。 落ちたところでも処理機能は、javaScriptでツリー表示を制御しています(UL,LIタグを利用)。 その処理で、どの項目が選択されたかを保持するためにcookieを使用していて、更新するときに以下のように書いています。 document.cookie="treeKey=" + opennodes; opennodesには1.3.5のようにピリオド区切りで入れています。 項目をリンク表示させていて、リンクを押下するとクッキーに書き込みに行くようになっています。 落ちている理由は、セッションの値がとれずシステムエラーを出していて、ログを見ると、リンクを押下した際にもう一方のサーバに接続してアクションを行おうとしていました。 alertを出して、リンク押下時にcookieに書き込まれたところまでは確認しています(セッションIDも同一) こういう負荷分散処理でcookieを使用(書き換えを頻繁に行うような使用方法)はだめなのでしょうか? 以上、説明がわかりにくいかもしれませんが、よろしくお願いいたします。

  • LWPでのCookie取得

    LWPでHTTPのクライアントを作成しています。 サーバ側で発行されたSet-Cookieヘッダを取得する方法ですが、 HTTP::Cookieでファイルに取得するのではなく、できれば変数に直接入れたい(ディスクI/Oを発生させたくない)のですが、 そのような手法はあるのでしょうか? また、Cookieの再利用方法を教えて下さい。 たとえば、一度クライアントを一度起動し、セッションCookieを取得して、 そのCookieをまた別のクライアントに引数などで渡し、その値を利用してアクセスする、 といったようなことです。 毎度毎度ログインをしないで、Cookieだけ使いまわせれば、と思っております。 上記は全部SSL通信上での話です。 (Net::Ssleyを使用してSocketを作成してみたのですが、なぜか失敗してしまう・・・)

    • ベストアンサー
    • Perl
  • apacheでcookieを扱いたい

    サーバーをapacheにしたらcookieがうまく動かなくなった。 以前、04WebServerを利用していた時のコード ・cookieの発行 print ("\r\n\r\n") print '<script language="javascript">' print 'document.cookie = "testcookie=1; path=/python"' print '</script>' ・cookieの削除 print ("\r\n\r\n") print '<script language="javascript">' print 'document.cookie = "testcookie=None; path=/python;" ' print '</script>' ・cookieの確認 if os.environ.has_key('HTTP_COOKIE'): cookie = Cookie.SimpleCookie() cookie.load(os.environ["HTTP_COOKIE"]) cookieValue = cookie["testcookie"].value 上記のようにcookie処理を行っており、 cookieを print すると Set-Cookie: testcookie=1 cookie["testcookie"].value から 1 が取得できました。 しかし、サーバーをApaheに変更したところ cookieを print すると Set-Cookie: Apache=4dcf77a5.50d1204a49e25 となってしまい、発行したはずのtestcookieは存在していません。 cookie["Apache"].value で取得できる値も 4dcf77a5.50d1204a49e25 とよくわからないものになっています。 何が問題なのか教えてください。

  • phpでcookieをセットする方法

    こんにちは。php4 apacheです。 簡単なログインのシステムを作りたいのですが、cookieのセットでつまづいてしまいました。 ちなみに前の質問は http://oshiete1.goo.ne.jp/kotaeru.php3?q=374947 です。 http headerは本文の前に送信しなければいけない事は教えていただいてわかったのですが、では具体的にどう記述したらいいのかまだわかりませんのでお力をいただければと思います。 やりたい事は、ページ1のテキストボックスに入力した値をページ1をサブミットさせてページ2にとばし、ページ2で、フォーム値があればその値をcookieにセット、なければそのままロード、ということをしたいのですが・・・。 ページ2の一番最初に、「もしフォーム値があればcookieをセット、 なければ(すでにcookieが存在するはずなので)そのままロード」 という処理を記述しているのですが、やはり前質問と同じエラーが出てしまいます。 cookieをセットする場合、if文すらその前に記述してはいけないのでしょうか・・・? とすると、こういう場合はどう記述してやるのが通常なのでしょうか? 何分仕事中なもので、返事が遅れることがあると思いますがアドバイスのほど宜しくお願い致します。

    • ベストアンサー
    • PHP