- - PR -
CookieバージョンとIE6の挙動について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-08-30 17:39
WindowsXP+Eclipse3.0+Tomcat5.0.28で開発しています。
Cookie.setVersion, getVersionの挙動を調べていたのですが、 どうも納得のいく結果が得られないので、アドバイスいただけますと 幸いです。 String value = URLEncoder.encode("テスト用クッキーです" , "Shift_JIS"); Cookie cookie = new Cookie("testcookie", value); cookie.setComment("テストの目的です。"); cookie.setMaxAge(60 * 5); cookie.setVersion(1); res.addCookie(cookie); 上記のようなコードで、一旦ブラウザ側でクッキーを保存させ、 その後cookie.getComment()すると、コメントがnullのままです。 原因を模索してみたのですが、保存後getCommentするときに getVersionすると、"1"と設定したバージョンが"0"に戻って しまっています。 これは設定方法が悪いのでしょうか。それともIEのCookieの サポートバージョンが原因なのでしょうか。元々Cookie ver.1は まだ実験段階らしいという情報は見つけましたが、今ひとつ 釈然としません。 また、ver.0で発行したクッキーは、ブラウザがCookieディレクトリに クッキーを保存しているようですが、ver.1については同じ場所には 保存しないようです。 是非教えていただけないでしょうか。よろしくお願いいたします。 |
|
投稿日時: 2005-08-30 18:15
Cookie.setVersion, getVersionのバージョンとは
RFCに定義されるプロトコルのバージョンを意味します。 よって、いっぽさんが考えている意味とは全く違います。 なんでデフォルト0なのかというとTomcatのソースからは 0が設定されているのが確認できました。 private int version = 0; // ;Version=1 ... means RFC 2109++ style で、このプロトコルですが“1”の1つして定義されていませんので かならず0が返るのだと思います。 (Tomcatだけで他のアプリケーションサーバは知りませんが、、) |
|
投稿日時: 2005-08-30 18:40
いっきゅうさん>
ご返答ありがとうございます。 すいません、自分が誤解している点はブラウザの仕様とは 関係ないということでよろしいでしょうか? ご指摘にある > private int version = 0; // ;Version=1 ... means RFC 2109++ style であり、Version=1の場合に cookie.setComment()、cookie.getComment()が 有効になるのではないのでしょうか?? 逆にブラウザの仕様とは関係ない場合、上記のコメントの設定/取得が 有効になる方法を教えていただけると幸いです。 よろしくお願いします。 |
|
投稿日時: 2005-08-30 23:40
こんばんは。
IE6.0 + Tomcat5.0にてパケットキャプチャしてみました。 【Ver.0】 Cookie cookie = new Cookie("test", "hoge"); cookie.setVersion(0);//Ver.0 cookie.setComment("comment"); cookie.setMaxAge(60 * 5); response.addCookie(cookie); ↓ レスポンス Set-Cookie: test=hoge; Expires=Tue, 30-Aug-2005 14:02:17 GMT ↓ リクエスト Cookie: test=hoge; 【Ver.1】 Cookie cookie = new Cookie("test", "hoge"); cookie.setVersion(1);//Ver.1 cookie.setComment("comment"); cookie.setMaxAge(60 * 5); response.addCookie(cookie); ↓ レスポンス Set-Cookie: test=hoge; Version=1; Comment=comment; Max-Age=300 ↓ リクエスト Cookie: test=hoge; レスポンスの段階では、意図する値がセット出来ているようですね。 RFC2109によると、 Versionは「クッキーのバージョン」 Max-Ageは「Cookieの寿命秒数」 Commentは「Cookieの利用目的とか説明文みたいなもの」 を指定するようです。 http://www.ietf.org/rfc/rfc2109.txt CommentについてはCookieの利用目的をポップアップなどで表示し、 受け入れるかどうかを判断させる用途で使用されますので、 バージョン1のクッキーをサポートするブラウザがあったとしても サーバに送信はされないようですが、(リクエストヘッダーの属性 として定義されていない。)Versionについては、送り返すべきです。 ほとんどのブラウザではRFC2109 及び 後発のRFC 2965をサポート していないとの記述を見つけましたが、IE6.0でもサポートしてい ないようですね。 サポートしているブラウザ、APサーバがあるのかどうか分かりませ んが、あるとするならばサーバ側でバージョンは取得出来るがコメ ントは取得出来ないといった動作をしそうです。 |
|
投稿日時: 2005-08-31 00:16
masaさん>
こんばんは。 パケットキャプチャまでしていただいてありがとうございます。 ver.0とver.1の挙動の違いを見ても、やはりcommentの設定は ver.1の機能になるのですね。 >Versionについては、送り返すべきです。 私もそう思います。 > サポートしているブラウザ、APサーバがあるのかどうか分かりませ > んが、あるとするならばサーバ側でバージョンは取得出来るがコメ > ントは取得出来ないといった動作をしそうです。 確かにおっしゃるとおりです。とすると、ブラウザ側の設定によって cookie.setComment()が有効に使用されることはあっても、 cookie.getComment()についてはあまり意味のない実装ということに なりますよね。 本日本屋にていくつかの書籍を漁ってみたのですが、このあたりの情報は 「コメントの設定/取得」に終始しており、Codeレベルでのサンプルは 見つけられませんでした。 #あったとしても実証できる環境はないかもしれませんが。。 いずれにしても、自分が作成したコードレベルでの問題ではないということが わかりましたので、少しすっきりしました。 ありがとうございます。 |
1