- PR -

Servletを使ったクッキーの取得

投稿者投稿内容
たけもやし
会議室デビュー日: 2005/10/06
投稿数: 6
投稿日時: 2005-10-06 22:35
はじめまして。
ご存知の方がいらっしゃいましたらご教授お願いいたします。

同じ画面で表示パターンが複数パターンあるためPostされる1つのサーブレットで複数種類のクッキーファイルを作成し、そのパターンにあったクッキーファイルを取得したいと考えています。
http://hoge/mainservlet/cookie
というページ(JSP)で検索条件にあったページ内容を表示させているのですが、保存ボタンを押下することで、そのページ内容ごとにクッキーファイルを作成したいと思っています。
しかし同アドレスからクッキーファイルを作成させているためクッキーファイルが上書きされてしまいます。まずこのような場合どのように複数のクッキーファイルを作成すればいいのでしょうか。
またクッキーファイルを取得する際に

Cookie[] cookies = request.getCookies();

上記のように取得するとクッキーファイルが1ファイルしか取得できません。
複数のクッキーファイルを作成し、指定したファイル名のクッキーファイルを読みことは可能でしょうか。

そもそもクッキーの性質上このような事は無理なのかな。と思ったのですがもし可能ならば!と思い投稿させていただきました。

よろしくお願いします。

【例】
http://hoge/mainservlet/cookieの
パターンAが表示されている場合に保存ボタンを押下
→パターンA用のクッキーファイルを作成
パターンBが表示されている場合に保存ボタンを押下
→パターンB用のクッキーファイルを作成
パターンCが表示されている場合に保存ボタンを押下
→パターンC用のクッキーファイルを作成

その後、画面遷移を経て再びhttp://hoge/mainservlet/cookie画面を表示。
検索条件を絞り込みパターンB画面を表示。
このとき、上記で作成したパターンB用のクッキーファイルを読み込みたい。


[ メッセージ編集済み 編集者: たけもやし 編集日時 2005-10-06 22:44 ]

[ メッセージ編集済み 編集者: たけもやし 編集日時 2005-10-07 10:19 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-10-07 10:07
ファイル、とは何を指していますか?
「複数種類のクッキーを作成(ファイルを複数作成する)」という文面からクッキー=ファイルとも読み取れますが「複数ファイルのクッキー」という表現もあって・・よく意味が分かりません。

「このように取得するとファイルにすると1ファイル分しか取得できません。 」という文章もなんだか変ですね。
今一度文面と質問内容を整理してみてはいかがでしょうか。
たけもやし
会議室デビュー日: 2005/10/06
投稿数: 6
投稿日時: 2005-10-07 10:20
わかりにくい本文になってしまっていて申し訳ないです。

編集しましたが少しは分かりやすくなったでしょうか・・・

引き続き、ご存知の方いらっしゃいましたらよろしくお願いいたします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-10-07 10:37
現在パターンA〜Cではドメイン、パス、名前が全く同じクッキーを送信しているということでしょうか?
クッキーは同じドメイン、同じパス、同じ名前のものがレスポンスに含まれている場合、既にブラウザに保存されているものは破棄、上書きされます。
区別する必要がある場合は別の名前で送信しましょう。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-07 10:40
一度、この辺りを読んでみると理解が深まると思います。
http://www.techscore.com/tech/J2EE/Servlet/4.html

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
たけもやし
会議室デビュー日: 2005/10/06
投稿数: 6
投稿日時: 2005-10-07 10:51
ご返信ありがとうございます。


fileName = request.getParameter("fileName");
Cookie cookie = new Cookie(faleName, value);

response.addCookie(cookie);

上記のように別名で送信しても1つのクッキーファイルの中に書き込まれてしまいます。
クッキーファイルを別々に作成するにはどのように作成すればいいのでしょうか。
上記の例ですと、fileNameに「パターン1・パターン2・パターン3」という名前が格納され、それぞれクッキーファイルを「パターン1.txt「パターン2.txt」「パターン3.txt」と作成したいのです。
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-10-07 11:28
どもです。がると申します。
んっと。Javaは(他言語と比較すると若干)門外漢な部分が
ありますので、さわりだけ。

まず、じゃんぬさんの差してくださったURLを熟読することを
お勧めします。
且つ、可能ならRFCもちゃんと紐解いたほうがよりよいでしょう。

で。
たけもやしさんの発言で最も気になる部分を。
「クッキーファイル」という概念はあまり一般的ではない
です。
というか、Cookieはそもそも「クライアントにデータを
保持させる仕組み」ではあるのものの、それが「どのように
保持されるか」については、サーバはノータッチであること
が原則です。
# まぁ実際に「ほぼ確定でファイル」なのですが。
# 別に「基本はメモリ」でも問題はないわけで。

しかるに、たけもやしさんの
引用:

それぞれクッキーファイルを「パターン1.txt「パターン2.txt」「パターン3.txt」と作成したいのです。


という発言は「クライアント挙動の制御」になるのですが、
HTTP上ではもともと「存在しない」発想です。

Cookieは必ず「name=value」の形式しかとりえません。
ですので、まず

引用:

パターンAが表示されている場合に保存ボタンを押下
→パターンA用のクッキーファイルを作成
パターンBが表示されている場合に保存ボタンを押下
→パターンB用のクッキーファイルを作成
パターンCが表示されている場合に保存ボタンを押下
→パターンC用のクッキーファイルを作成


に関しては、
・パターンnが表示されている、はどのように判断をするか?
 →通常はhiddenやらその他パラメタ
・パターンnに見合ったvalueをCookieに設定
 →例えば「type=A」「type=B」など

で、Cookieに「どのパターンであるか」は記述か可能です。

引用:

その後、画面遷移を経て再びhttp://hoge/mainservlet/cookie画面を表示。
検索条件を絞り込みパターンB画面を表示。
このとき、上記で作成したパターンB用のクッキーファイルを読み込みたい。


これに関しては
・Cookieからtypeの値を読み込む
・そのtypeに見合った設定を「サーバ側のfileとかDBとか」から読み込む
ほうが通例かと思われます。

恐らく、Cookieをきちんと理解すると、もう少し設計が変わって、
そうすると実装が楽になると思うのですがどうでしょうか?
たけもやし
会議室デビュー日: 2005/10/06
投稿数: 6
投稿日時: 2005-10-07 12:25
がるがる様、ご返信ありがとうございます。

なぜあのような発想にいたったかと言いますとそもそも保存する必要があるパターンが相当多く、かつその1パターンで作成されるクッキーのサイズが3K前後になってしまうため

.一つの Cookie は、NAME と VALUE 合わせて、最大で 4 キロバイトまで

という制限に引っかかる事が懸念されるためです。

引用:

・パターンnに見合ったvalueをCookieに設定
 →例えば「type=A」「type=B」など


上記だと、すぐに4Kを超えてしまうので・・・。


[ メッセージ編集済み 編集者: たけもやし 編集日時 2005-10-07 12:25 ]

スキルアップ/キャリアアップ(JOB@IT)