Cookieの管理、取り扱い方法について教えて下さい。


・Cookieの保存のタイミングについて。
 CookieはWebページ閲覧のどのタイミングで保存されるのでしょうか?

 また、保存の対象としては、
 サイトを訪れた日時、訪問回数以外にも、
 Javaでは変数の値もCookie情報として保存して扱う事ができる様子ですが、
 「Webブラウザで扱うCookie」と「Javaで扱うCookie」は別ものなのでしょうか?

・CookieをJavaで扱う場合の設定方法と取得方法について
 
 JavaではWebページでブラウザが保存しているCookieから持ってきているのでしょうか?
 それとも、Javaで「この情報をCookieとして扱います」という設定をして、
 その設定を元にCookieの情報を扱うものなのでしょうか?

 例えば、
 Cookieに保存されてある値をJavaで取得する場合、
 一度「String c = "クッキー";」という変数を使用して、それを画面に表示させた場合
 「c はクッキーである。」という情報がCookieが保持されるのでしょうか?

・Javaで画面に値を表示させる場合
 値を使いまわしたい場合はセッションから持ってくるべきであって、
 Cookieの値をセッションのように使いまわして取得する方法は好ましくないでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/03/10 08:15:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:KUROX No.1

回答回数3542ベストアンサー獲得回数140

ポイント23pt

>「Webブラウザで扱うCookie」と「Javaで扱うCookie」は別ものなのでしょうか?

同じ

>Cookieの値をセッションのように使いまわして取得する方法は好ましくないでしょうか?

セッションは、セッションIDのいう値をCookieに書き込んで実現されています。

セッション使ったほうが楽でシンプルですけど。

http://q.hatena.ne.jp/answer

id:like_aoihana

>「Webブラウザで扱うCookie」と「Javaで扱うCookie」は別ものなのでしょうか?

>> 同じ

ありがとうございます。

何か特別な区別があるのではと思っておりました(汗)

>> セッションは、セッションIDのいう値をCookieに書き込んで実現されています。

ありがとうございます。

セッションの実現はCookieに書き込まれて実現されることですが、

同様にセッションの値もCookieから取得してきているのでしょうか?

セッションの実現にはCookieにセッションIDを埋め込むところは分かったのですが、

実際のセッションの値は、Cookieではなく、あくまで「セッション領域から取得をするもの」

という認識で合っていますでしょうか?

2008/03/03 19:50:58
id:pahoo No.2

回答回数5960ベストアンサー獲得回数633

ポイント23pt

Cookieの保存のタイミングについて。

HTTP通信においてサーバがブラウザに応答を返す際、<meta http-equiv="Set-Cookie">タグがあれば、ブラウザはローカル(クライアント)にCookieを保存します。


JavaではWebページでブラウザが保存しているCookieから持ってきているのでしょうか?

HTTP通信においてブラウザがサーバと通信する際、ローカルに当該ドメインのCookieがあれば、それをHTTPヘッダに含めて送信します。したがって、サーバサイド・プログラムは、Javaであれ何であれ、Cookieを受けることができます。

Cookieの保存はドメインが基準になっているので、Java以外のサーバサイド・プログラムで保存指示したCookieであっても、同じドメインにある他のプログラムから読むことが出来ます。したがって、識別子の管理を行う必要があります。


Javaで画面に値を表示させる場合

どのような用途を想定しているのか分かりませんが、Cookieを認証やセッション管理に用いているのであれば、画面に表示するのは好ましくありません。

また、Cookieの管理は、ドメイン名、パス名、有効期限、セキュア接続の有無によって行われます。セッションのような作業変数として用いるのであれば、有効期限を短くすべきです。また、場合によってはセキュア接続の有無も設定しておいて方がいいでしょう。


Cookieに関する情報は、下記サイトによく整理されています。

id:like_aoihana

> Cookieの保存のタイミングについて。

>> HTTP通信においてサーバがブラウザに応答を返す際、<meta http-equiv="Set-Cookie">タグがあれば、ブラウザはローカル(クライアント)にCookieを保存します。


ありがとうございます。

こちらはこのタグがあればクッキーがローカルに保存されるとのことで、

普段使用しているHP(検索サイト)などを 表示 ⇒ ソースで 確認してみたところ。

大抵のところでは見当たりませんでした。


大抵のところで設定されてあると思ったのですが、

そうでもないようで不思議に思っています。


Cookieの設定は本来はそんなにされるものではないのでしょうか?



> Cookieの保存はドメインが基準になっているので、Java以外のサーバサイド・プログラムで保存指示したCookieであっても、同じドメインにある他のプログラムから読むことが出来ます。したがって、識別子の管理を行う必要があります。

この観点でIDによって値を取り扱うセッションの概念が出てきたのでしょうか?


> セッションのような作業変数として用いるのであれば、有効期限を短くすべきです。

こちらは、有効期限を設定すべきなのは、

設定しないと値が蓄積されてしまい、処理がゴミの用に溜まり可笑しくなってしまう可能性が出てくるからでしょうか?


どのような用途を想定しているのか分かりませんが、Cookieを認証やセッション管理に用いているのであれば、画面に表示するのは好ましくありません。


> また、Cookieの管理は、ドメイン名、パス名、有効期限、セキュア接続の有無によって行われます。セッションのような作業変数として用いるのであれば、有効期限を短くすべきです。また、場合によってはセキュア接続の有無も設定しておいて方がいいでしょう。

知りませんでした。

Cookieといっても、設定方法にも色々とあるのですね(汗)

普段何気にある「ユーザーの記録を何か保存していたもの」という認識から

全然違うもののように見えてきました(驚

とほほさんの所を見た限りでは、

Cookieの語源も実は無いそうで、少し不思議です。

(語源で用途が明確になると思ったのですが、難しいです 汗)


想定していた用途としては

画面のブラウザが閉じるボタンを押されるまでの間に値を保持させるために

使いたいと思っていました。


またそこで

一度検索を掛けた以降に必ず使う値であるのならば、

そういう情報をずっと保持できるものが使えたらな、という考えでです。


セッションだとできないみたいですが、

Cookieではそれを可能としている様子なので、

Cookieを使用する方法が正規方法であるなら、覚えておきたいと思ったのです。

2008/03/03 22:26:38
id:KUROX No.3

回答回数3542ベストアンサー獲得回数140

ポイント22pt

>Cookieの設定は本来はそんなにされるものではないのでしょうか?

HTTPヘッダ関係を調べてみれば、タイミングはわかると思います。

サーバがクライアントに Cookie を送る時のレスポンスヘッダの例をご覧下さい。

このタイミングでかかれます。

http://www.studyinghttp.net/cookies

クライアントからサーバーへレスポンスを送るときは、

そのサイトで読み取り可能なCookieをすべて返すという仕様だった記憶があります。


>一度検索を掛けた以降に必ず使う値であるのならば、

>そういう情報をずっと保持できるものが使えたらな、という考えでです。

>セッションだとできないみたいですが、

セッションのタイムアウトは、長くても30分程度ですので、そういう使用目的には

向かないと思います。今回の場合は直接クッキーに保持で問題ないと思います。

ほかには、

ログインとかさせるタイプなら、ログインIDと保存したいデータをDBに保存しておけば

可能です。

2度目のログインを省略する仕様なら、

この場合、ログインIDはクッキーで保持する必要があります。

毎回ログインしてもらってかまわないのなら、クッキーに値を保持する必要はありません。


セッションIDはプログラマは意識しませんので、それを直接使うことはありません。

id:pahoo No.4

回答回数5960ベストアンサー獲得回数633

ポイント22pt

画面のブラウザが閉じるボタンを押されるまでの間に値を保持させるために

これは「セッション」ですね。

サーバサイドでブラウザの「閉じるボタン」が押下されたことは感知できないので、「セッション管理」をしなければなりません。一般的には、

  1. ログアウトボタン
  2. 一定時間でセッションを切る
  3. セッション継続中に同じブラウザからアクセスがあった場合には初期化する

などの仕組みを組み込みます。


参考サイト

  • id:like_aoihana
    id:KUROX さん、ご回答ありがとうございます。
    ご返信が遅れてすみませんでした。


    ------------------------------------------------------------------
    >一度検索を掛けた以降に必ず使う値であるのならば、
    >そういう情報をずっと保持できるものが使えたらな、という考えでです。
    >セッションだとできないみたいですが、
    セッションのタイムアウトは、長くても30分程度ですので、そういう使用目的には
    向かないと思います。今回の場合は直接クッキーに保持で問題ないと思います。
    ------------------------------------------------------------------
    こちらありがとうございます。
    今回の場合はCookieを使用で値を使いまわす方向でいきたいと思います。



    >2度目のログインを省略する仕様なら、
    >この場合、ログインIDはクッキーで保持する必要があります。
    こちらは試してみたいです。
    そこまで深くは考えておらず、Webプログラミングを勉強する上で、
    値保持に関してもどのような種類があるのかを知りたかったのです。
    そこを探していたらCookieに当たったのです。


    セッションIDについて了解しました。
  • id:like_aoihana
    id:pahooさん、ご回答ありがとうございます。
    ご返事が遅れてすみませんでした。


    >ログアウトボタン
    >一定時間でセッションを切る
    >セッション継続中に同じブラウザからアクセスがあった場合には初期化する
    ありがとうございます。
    こちらがセッション管理としてから使われているのですね。

    >参考サイト
    ありがとうございます。
    こちら「セッションのクッキーの管理」が読みやすく面白かったです。
    何だか楽しみながら勉強ができるような感じでした。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません