・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の値をセッションのように使いまわして取得する方法は好ましくないでしょうか?
>「Webブラウザで扱うCookie」と「Javaで扱うCookie」は別ものなのでしょうか?
同じ
>Cookieの値をセッションのように使いまわして取得する方法は好ましくないでしょうか?
セッションは、セッションIDのいう値をCookieに書き込んで実現されています。
セッション使ったほうが楽でシンプルですけど。
Cookieの保存のタイミングについて。
HTTP通信においてサーバがブラウザに応答を返す際、<meta http-equiv="Set-Cookie">タグがあれば、ブラウザはローカル(クライアント)にCookieを保存します。
JavaではWebページでブラウザが保存しているCookieから持ってきているのでしょうか?
HTTP通信においてブラウザがサーバと通信する際、ローカルに当該ドメインのCookieがあれば、それをHTTPヘッダに含めて送信します。したがって、サーバサイド・プログラムは、Javaであれ何であれ、Cookieを受けることができます。
Cookieの保存はドメインが基準になっているので、Java以外のサーバサイド・プログラムで保存指示したCookieであっても、同じドメインにある他のプログラムから読むことが出来ます。したがって、識別子の管理を行う必要があります。
Javaで画面に値を表示させる場合
どのような用途を想定しているのか分かりませんが、Cookieを認証やセッション管理に用いているのであれば、画面に表示するのは好ましくありません。
また、Cookieの管理は、ドメイン名、パス名、有効期限、セキュア接続の有無によって行われます。セッションのような作業変数として用いるのであれば、有効期限を短くすべきです。また、場合によってはセキュア接続の有無も設定しておいて方がいいでしょう。
Cookieに関する情報は、下記サイトによく整理されています。
> Cookieの保存のタイミングについて。
>> HTTP通信においてサーバがブラウザに応答を返す際、<meta http-equiv="Set-Cookie">タグがあれば、ブラウザはローカル(クライアント)にCookieを保存します。
ありがとうございます。
こちらはこのタグがあればクッキーがローカルに保存されるとのことで、
普段使用しているHP(検索サイト)などを 表示 ⇒ ソースで 確認してみたところ。
大抵のところでは見当たりませんでした。
大抵のところで設定されてあると思ったのですが、
そうでもないようで不思議に思っています。
Cookieの設定は本来はそんなにされるものではないのでしょうか?
> Cookieの保存はドメインが基準になっているので、Java以外のサーバサイド・プログラムで保存指示したCookieであっても、同じドメインにある他のプログラムから読むことが出来ます。したがって、識別子の管理を行う必要があります。
この観点でIDによって値を取り扱うセッションの概念が出てきたのでしょうか?
> セッションのような作業変数として用いるのであれば、有効期限を短くすべきです。
こちらは、有効期限を設定すべきなのは、
設定しないと値が蓄積されてしまい、処理がゴミの用に溜まり可笑しくなってしまう可能性が出てくるからでしょうか?
どのような用途を想定しているのか分かりませんが、Cookieを認証やセッション管理に用いているのであれば、画面に表示するのは好ましくありません。
> また、Cookieの管理は、ドメイン名、パス名、有効期限、セキュア接続の有無によって行われます。セッションのような作業変数として用いるのであれば、有効期限を短くすべきです。また、場合によってはセキュア接続の有無も設定しておいて方がいいでしょう。
知りませんでした。
Cookieといっても、設定方法にも色々とあるのですね(汗)
普段何気にある「ユーザーの記録を何か保存していたもの」という認識から
全然違うもののように見えてきました(驚
とほほさんの所を見た限りでは、
Cookieの語源も実は無いそうで、少し不思議です。
(語源で用途が明確になると思ったのですが、難しいです 汗)
想定していた用途としては
画面のブラウザが閉じるボタンを押されるまでの間に値を保持させるために
使いたいと思っていました。
またそこで
一度検索を掛けた以降に必ず使う値であるのならば、
そういう情報をずっと保持できるものが使えたらな、という考えでです。
セッションだとできないみたいですが、
Cookieではそれを可能としている様子なので、
Cookieを使用する方法が正規方法であるなら、覚えておきたいと思ったのです。
>Cookieの設定は本来はそんなにされるものではないのでしょうか?
HTTPヘッダ関係を調べてみれば、タイミングはわかると思います。
サーバがクライアントに Cookie を送る時のレスポンスヘッダの例をご覧下さい。
このタイミングでかかれます。
http://www.studyinghttp.net/cookies
クライアントからサーバーへレスポンスを送るときは、
そのサイトで読み取り可能なCookieをすべて返すという仕様だった記憶があります。
>一度検索を掛けた以降に必ず使う値であるのならば、
>そういう情報をずっと保持できるものが使えたらな、という考えでです。
>セッションだとできないみたいですが、
セッションのタイムアウトは、長くても30分程度ですので、そういう使用目的には
向かないと思います。今回の場合は直接クッキーに保持で問題ないと思います。
ほかには、
ログインとかさせるタイプなら、ログインIDと保存したいデータをDBに保存しておけば
可能です。
2度目のログインを省略する仕様なら、
この場合、ログインIDはクッキーで保持する必要があります。
毎回ログインしてもらってかまわないのなら、クッキーに値を保持する必要はありません。
セッションIDはプログラマは意識しませんので、それを直接使うことはありません。
画面のブラウザが閉じるボタンを押されるまでの間に値を保持させるために
これは「セッション」ですね。
サーバサイドでブラウザの「閉じるボタン」が押下されたことは感知できないので、「セッション管理」をしなければなりません。一般的には、
などの仕組みを組み込みます。
>「Webブラウザで扱うCookie」と「Javaで扱うCookie」は別ものなのでしょうか?
>> 同じ
ありがとうございます。
何か特別な区別があるのではと思っておりました(汗)
>> セッションは、セッションIDのいう値をCookieに書き込んで実現されています。
ありがとうございます。
セッションの実現はCookieに書き込まれて実現されることですが、
同様にセッションの値もCookieから取得してきているのでしょうか?
セッションの実現にはCookieにセッションIDを埋め込むところは分かったのですが、
実際のセッションの値は、Cookieではなく、あくまで「セッション領域から取得をするもの」
という認識で合っていますでしょうか?