public final class HttpCookie extends Object implements Cloneable
HTTP Cookieの仕様には次の3つがあります。
Netscapeドラフト
RFC 2109 - http://www.ietf.org/rfc/rfc2109.txt
RFC 2965 - http://www.ietf.org/rfc/rfc2965.txt
HttpCookieクラスは、これら3つの形式の構文をすべて受け付けることができます。
| コンストラクタと説明 |
|---|
HttpCookie(String name, String value)
指定された名前と値を持つCookieを構築します。
|
| 修飾子と型 | メソッドと説明 |
|---|---|
Object |
clone()
このオブジェクトのコピーを作成して返します。
|
static boolean |
domainMatches(String domain, String host)
あるホスト名があるドメインに含まれるかどうかをチェックするためのユーティリティ・メソッド。
|
boolean |
equals(Object obj)
2つのHTTP Cookieが等しいかどうかを判定します。
|
String |
getComment()
このCookieの目的を説明するコメントを返します。Cookieにコメントがない場合は、
nullを返します。 |
String |
getCommentURL()
このCookieの目的を説明するコメントURLを返します。このCookieにコメントURLがない場合は
nullを返します。 |
boolean |
getDiscard()
Cookieの破棄属性を返します
|
String |
getDomain()
このCookieに設定されたドメイン名を返します。
|
long |
getMaxAge()
Cookieの最長有効期間を秒数で返します。
|
String |
getName()
Cookieの名前を返します。
|
String |
getPath()
ブラウザがこのCookieを返す先となる、サーバー上のパスを返します。
|
String |
getPortlist()
Cookieのポート・リスト属性を返します
|
boolean |
getSecure()
このCookieの送信をセキュアなプロトコルに制限すべき場合は
true、どのようなプロトコルを使用して送信してもかまわない場合はfalseを返します。 |
String |
getValue()
Cookieの値を返します。
|
int |
getVersion()
このCookieが準拠するプロトコルのバージョンを返します。
|
boolean |
hasExpired()
このHTTP Cookieの有効期限が切れているかどうかを報告します。
|
int |
hashCode()
このHTTP Cookieのハッシュ・コードを返します。
|
boolean |
isHttpOnly()
このCookieがHttpOnly属性を含む場合は
trueを返します。 |
static List<HttpCookie> |
parse(String header)
set-cookieまたはset-cookie2ヘッダー文字列からCookieを構築します。
|
void |
setComment(String purpose)
Cookieの目的を説明するコメントを指定します。
|
void |
setCommentURL(String purpose)
Cookieの目的を説明するコメントURLを指定します。
|
void |
setDiscard(boolean discard)
ユーザー・エージェントがCookieを無条件に破棄すべきかどうかを指定します。
|
void |
setDomain(String pattern)
このCookieが提示されるドメインを指定します。
|
void |
setHttpOnly(boolean httpOnly)
CookieをHTTP Onlyとみなすべきかどうかを示します。
|
void |
setMaxAge(long expiry)
Cookieの最長有効期間を秒数で設定します。
|
void |
setPath(String uri)
クライアントがCookieを返す必要のあるCookieのパスを指定します。
|
void |
setPortlist(String ports)
Cookieのポート・リストを指定します。このリストは、CookieをCookieヘッダー内に収めて送り返す際に使用できるポート(複数可)を制約します。
|
void |
setSecure(boolean flag)
CookieをHTTPSやSSLなどのセキュアなプロトコルのみを使用して送信するべきかどうかを示します。
|
void |
setValue(String newValue)
Cookieの作成後に、Cookieに新しい値を割り当てます。
|
void |
setVersion(int v)
このCookieが準拠するCookieプロトコルのバージョンを設定します。
|
String |
toString()
このCookieのCookieヘッダー文字列表現を構築します。その形式は、対応するCookie仕様で定義されているものですが、先頭の「Cookie」トークンは付きません。
|
public HttpCookie(String name, String value)
名前はRFC 2965に準拠している必要があります。つまり、ASCIIの英数文字のみを含み、カンマ、セミコロン、空白を含むことはできず、$文字が先頭にあってはいけません。Cookieの作成後に名前を変更することはできません。
値には特に制限はありません。その値は通常、サーバーにとってのみ意味があります。Cookieの値は、作成後にsetValueメソッドを使用して変更できます。
特に指定しないかぎり、CookieはRFC 2965のCookie仕様に従って作成されます。バージョンを変更するにはsetVersionメソッドを使用します。
name−Cookieの名前を指定するStringvalue−Cookieの値を指定するStringIllegalArgumentException - Cookie名に不正な文字が含まれている場合NullPointerException - nameがnullの場合setValue(java.lang.String), setVersion(int)public static List<HttpCookie> parse(String header)
header−set-cookieヘッダーを指定するString。ヘッダーは、「set-cookie」または「set-cookie2」トークンで始まっているか、開始トークンをまったく持たないか、のいずれかにすべきである。IllegalArgumentException - ヘッダー文字列がCookie仕様の構文に違反しているか、Cookie名に不正な文字が含まれている場合。NullPointerException−ヘッダー文字列がnullの場合public boolean hasExpired()
true。そうでない場合はfalsepublic void setComment(String purpose)
purpose−ユーザーに表示するコメントを指定するStringgetComment()public String getComment()
nullを返します。String。コメントがない場合はnullsetComment(java.lang.String)public void setCommentURL(String purpose)
purpose - ユーザーに表示するコメントURLを指定するStringgetCommentURL()public String getCommentURL()
nullを返します。String。コメントがない場合はnullsetCommentURL(java.lang.String)public void setDiscard(boolean discard)
discard−trueは、Cookieを無条件に破棄することを示しますgetDiscard()public boolean getDiscard()
booleansetDiscard(boolean)public void setPortlist(String ports)
ports - ポート・リストを指定するString。これは数字のカンマ区切りリストですgetPortlist()public String getPortlist()
String。存在しない場合はnullsetPortlist(java.lang.String)public void setDomain(String pattern)
ドメイン名の形式は、RFC 2965によって指定されています。ドメイン名は.foo.comのようにドットで始まり、指定されたドメイン・ネーム・システム(DNS)のゾーン内のサーバーがそのCookieを参照できることを示しています。たとえばこの場合、www.foo.comはCookieを参照できますが、a.b.foo.comはCookieを参照できません。特に指定しないかぎり、Cookieはそれを送信したサーバーにのみ返されます。
pattern−このCookieが可視となるドメイン名が格納されたString。形式はRFC 2965に従いますgetDomain()public String getDomain()
StringsetDomain(java.lang.String)public void setMaxAge(long expiry)
正の値を指定すると、その秒数が経過したあとにCookieが期限切れになります。この値は、Cookieの現在の有効期間ではなく、Cookieの期限が切れるまでの最長の有効期間であることに注意してください。
負の値を指定すると、Cookieは持続的に保持されずに、Webブラウザが終了したときに削除されます。0の値を指定すると、Cookieが削除されます。
expiry−Cookieの最長有効期間を秒数で指定する整数。0の場合、Cookieはすぐに破棄され、それ以外の場合、Cookieの最長有効期間は未定義となります。getMaxAge()public long getMaxAge()
-1です。これは、ブラウザがシャットダウンされるまでCookieが持続することを示します。setMaxAge(long)public void setPath(String uri)
指定されたディレクトリ内のすべてのページと、そのディレクトリのサブディレクトリ内のすべてのページに対して、Cookieが可視になります。CookieのパスにはそのCookieを設定するサーブレットを含めてください。たとえば、/catalogを指定した場合、サーバー上の/catalogの下にあるすべてのディレクトリに対して、Cookieが可視になります。
Cookieのパス名の設定方法についての詳細は、RFC 2965で調べてください。RFC 2109は、インターネットで公開されています。
uri−パスを指定するStringgetPath()public String getPath()
String。例: /catalogsetPath(java.lang.String)public void setSecure(boolean flag)
デフォルト値はfalseです。
flag - trueの場合、Cookieを送信できるのはHTTPSのようなセキュアなプロトコル上でのみです。falseの場合、任意のプロトコル上で送信できます。getSecure()public boolean getSecure()
true、どのようなプロトコルを使用して送信してもかまわない場合はfalseを返します。false。その他の場合はtruesetSecure(boolean)public String getName()
Stringpublic void setValue(String newValue)
バージョン0のCookieの場合、空白、角カッコ、カッコ、等号、カンマ、二重引用符、スラッシュ、疑問符、単価記号、コロン、およびセミコロンを値に含めないようにしてください。空の値を指定すると、ブラウザ間で異なる動作をする可能性があります。
newValue−新しい値を指定するStringgetValue()public String getValue()
StringsetValue(java.lang.String)public int getVersion()
setVersion(int)public void setVersion(int v)
v−Cookieが元のNetscape仕様に準拠すべきである場合は0、RFC 2965/2109に準拠すべきである場合は1IllegalArgumentException−vが0、1のいずれでもない場合getVersion()public boolean isHttpOnly()
trueを返します。これは、JavaScriptのようなスクリプト・エンジンがCookieにアクセスできてはいけないことを意味します。truesetHttpOnly(boolean)public void setHttpOnly(boolean httpOnly)
trueに設定されている場合、JavaScriptのようなスクリプト・エンジンがCookieにアクセスできてはいけないことを意味します。httpOnly - trueの場合はCookieをHTTPのみとします。つまり、HTTP要求の一部としてのみ可視となります。isHttpOnly()public static boolean domainMatches(String domain, String host)
この概念については、Cookie仕様内で説明されています。この概念を理解するには、まず、いくつかの用語を定義しておく必要があります。
有効ホスト名=ホスト名にドットが含まれる場合はhostname、
ドットが含まれない場合はhostname.local
ホストAの名前がホストBの名前とドメイン一致するのは、次のいずれかが成り立つ場合です。
- それらのホスト名文字列を文字列比較した結果が等しくなる
- AがHDN文字列であり、NBの形式を持つ。ここで、Nは空でない名前文字列であり、Bは.B'の形式を持ち、B'はHDN文字列である。(したがって、x.y.comは、.Y.comにはドメイン一致するが、Y.comにはドメイン一致しない。)
ホストがドメインに含まれない(RFC 2965セクション3.3.2)のは、次のいずれかが成り立つ場合です。
- Domain属性の値に埋込みドットが含まれておらず、その値が.localではない。
- 要求ホストから派生した有効ホスト名が、Domain属性とドメイン一致しない。
- 要求ホストがHDN (IPアドレスではない)であり、HDの形式を持つ。ここで、DはDomain属性の値であり、Hは1つ以上のドットを含む文字列である。
例
- 要求ホストy.x.foo.comからのDomain=.foo.comのSet-Cookie2は拒否される。なぜなら、Hはy.xであり、ドットが含まれるからである。
- 要求ホストx.foo.comからのDomain=.foo.comのSet-Cookie2は受け入れられる。
- Domain=.comまたはDomain=.com. を含むSet-Cookie2は常に拒否される。なぜなら、埋込みドットが存在しないからである。
- 要求ホストexampleからのDomain=.localのSet-Cookie2は受け入れられる。なぜなら、要求ホストの有効ホスト名はexample.localであり、example.localは.localにドメイン一致するからである。
domain−ホスト名のチェックに使用するドメイン名host−問題のホスト名true、それ以外の場合はfalsepublic String toString()
public boolean equals(Object obj)
結果がtrueになるのは、2つのCookieが同じドメイン(大文字、小文字の区別なし)から送られてきたものであり、同じ名前(大文字、小文字の区別なし)を持ち、同じパス(大文字、小文字の区別あり)を持つ場合だけです。
equals、クラス: Objectobj - 比較対象の参照オブジェクト。true。そうでない場合はfalseObject.hashCode(), HashMappublic int hashCode()
getName().toLowerCase().hashCode()
+ getDomain().toLowerCase().hashCode()
+ getPath().hashCode()
hashCode、クラス: ObjectObject.equals(java.lang.Object), System.identityHashCode(java.lang.Object) バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.