public class Cookie extends Object implements Cloneable, Serializable
Cookieは名前や単一の値、コメント、パス、ドメイン修飾子、最大経過時間、バージョン番号などのオプションの属性を持ちます。 一部のWebブラウザではオプショナルな属性の処理方法にバグがあるためサーブレットの相互運用性を向上させるために余分に使用します
サーブレットは HttpServletResponse.addCookie(javax.servlet.http.Cookie)
メソッドを使用してHTTPレスポンスヘッダーにフィールドを追加し、ブラウザにCookieを1つずつ送信します。
ブラウザは各Webサーバーごとに20個のCookieをサポートし、合計300個のCookieをサポートし、Cookieサイズはそれぞれ4 KBに制限されるはずです。
ブラウザはHTTPのリクエストヘッダーにフィールドを追加することによって、サーブレットにCookieを返します。
Cookieは HttpServletRequest.getCookies()
メソッドを使用することでリクエストから取得できます。
いくつかのCookieは同じ名前でもパス属性が異なるかもしれません。
CookieはCookieを使用するWebページのキャッシュに影響します。 HTTP 1.0ではこのクラスで作成されたCookieを使用するページはキャッシュされません。 このクラスはHTTP 1.1で定義されたキャッシュコントロールをサポートしていません。
このクラスはバージョン0(Netscape準拠)とバージョン1(RFC2109準拠)の両方のCookie仕様をサポートします。 デフォルトでは最高の相互運用性を確保するためにバージョン0のCookieが作成されます。
訳注:実際には2017年時点での最新のCookieの仕様であるRFC6265に従っているように見えます。 例えばhttpOnly属性はバージョン0、バージョン1には存在しません。 ただし、version属性自体はRFC6265には存在しません。
修飾子とタイプ | メソッドと説明 |
---|---|
Object |
clone()
標準の
java.lang.Object.clone をオーバーライドしてこのCookieのコピーを返します。 |
String |
getComment()
このCookieの目的を説明するコメントを返します。
|
String |
getDomain()
このCookieに設定されたドメイン名を取得します。
|
int |
getMaxAge()
Cookieの最長の存続期間を取得します。
|
String |
getName()
Cookieの名前を返します。
|
String |
getPath()
ブラウザがサーバーにCookieを返すpathを返します。
|
boolean |
getSecure()
ブラウザが安全なプロトコルを使用してのみCookieを送信する場合は
true を返し、どんなプロトコルでもCookieを送信する場合はfalse を返します。 |
String |
getValue()
Cookieの現在の値を取得します。
|
int |
getVersion()
このCookieが準拠しているCookieのプロトコルのバージョンを返します。
|
boolean |
isHttpOnly()
Cookieに HttpOnly 属性がついているかどうかを確認します。
|
void |
setComment(String purpose)
Cookieの目的を説明するコメントを設定します。
|
void |
setDomain(String domain)
このCookieを送信する必要があるドメインを設定します。
|
void |
setHttpOnly(boolean isHttpOnly)
Cookie に HttpOnly 属性を設定します。
|
void |
setMaxAge(int expiry)
Cookieの最長の存続期間を設定します。
|
void |
setPath(String uri)
クライアントがCookieを返す必要があるpathを指定します。
|
void |
setSecure(boolean flag)
HTTPSまたはSSLなどの安全なプロトコルを使用してのみCookieを送信する必要があるかどうかをブラウザに示します。
|
void |
setValue(String newValue)
Cookieに新しい値を設定します。
|
void |
setVersion(int v)
このCookieが準拠しているCookieのプロトコルのバージョンを設定します。
|
public Cookie(String name, String value)
名前はRFC 2109に準拠していなければなりません。 ただしベンダーはオリジナルのNetscapeのCookie仕様に準拠したCookie名を受け付ける設定オプションを提供することがあります。
Cookieは作成された後に名前を変更することはできません。
Cookieの値は作成した後に setValue
メソッドで変更可能です。
デフォルトではCookieはNetscapeのCookie仕様に従って作成されます。
バージョンは setVersion
メソッドで変更できます。
name
- Cookieの名前value
- Cookieの値IllegalArgumentException
- Cookieの名前がnullまたは空であるか、不正な文字(コンマ、スペース、セミコロンなど)が含まれている場合、
もしくはCookieプロトコルで使用するために予約されているトークンと一致する場合setValue(java.lang.String)
,
setVersion(int)
public void setComment(String purpose)
purpose
- ユーザーに表示するコメントの String
getComment()
public String getComment()
null
を返します。null
setComment(java.lang.String)
public void setDomain(String domain)
ドメイン名の形式はRFC 2109で規定されています。
ドメイン名は .foo.com
のように"."で始まります。
この場合、Cookie は指定された Domain Name System (DNS) のゾーン内のサーバから見えるようになります。
例えば、www.foo.com からは見えるけれど、a.b.foo.com からは見えないというようにです。
デフォルトではCookieは送信したサーバー自身にのみ返されます。
訳注:RFC 6265 ではドメイン名は"."から始まる必要はありません。 また、foo.com と指定した場合は www.foo.com からも a.b.foo.com からも参照できますので、先のJavaDocの説明は間違えていると考えられます。
domain
- Cookieが参照できるドメイン名;RFC 2109に従っている必要があるgetDomain()
public String getDomain()
ドメイン名はRFC 2109に従ってフォーマットされています。
setDomain(java.lang.String)
public void setMaxAge(int expiry)
正の値はCookieが指定秒後に失効することを示します。 注意として、値はCookieの現在の経過時間ではなくCookieが期限切れになるまでの最長の経過時間です。
負の値はCookieが永続的に保存されずWebブラウザが終了したときに削除されることを意味します。 値が0の場合はCookieは削除されます。
expiry
- 正の値の場合Cookieの最長の存続期間の秒数;負の数の場合はWebブラウザが終了したときに削除される;0の場合は消されるgetMaxAge()
public int getMaxAge()
setMaxAge(int)
public void setPath(String uri)
Cookieはここで指定したサブディレクトリを含むディレクトリ内のすべてのページで参照することができます。 CookieのpathはCookieを設定したサーブレットを含む必要があります。 例えば/catalogと設定すると、そのCookieはサーバー上の/catalog以下のすべてのディレクトリで参照できます。
Cookieのパス名を設定する方法の詳細についてはRFC 2109(インターネットで入手可能)を参照してください。
訳注:RFC 6265(インターネットで入手可能)を参照したほうが良いでしょう。
uri
- パス文字列getPath()
public String getPath()
setPath(java.lang.String)
public void setSecure(boolean flag)
デフォルト値は false
です。
flag
- もし true
ならばブラウザは安全なプロトコルを使用してのみCookieを送信する;
もし false
ならばどんなプロトコルでも送信するgetSecure()
public boolean getSecure()
true
を返し、どんなプロトコルでもCookieを送信する場合はfalse
を返します。true
、そうでないならfalse
。setSecure(boolean)
public String getName()
public void setValue(String newValue)
もしあなたがバイナリデータを使いたいなら、BASE64でエンコードをしてみてもよいです。
バージョン0のCookieでは値に空白、鉤かっこ、丸かっこ、中かっこ、等号、コンマ、二重引用符、スラッシュ、疑問符、アットマーク、コロン、およびセミコロンを含めない方が良いです。 空の値は、すべてのブラウザで同じように動作しないことがあります。
訳注:バージョン0はもう使われてないはずなのでこの記述は無視してよいです。
newValue
- Cookieの新しい値getValue()
public String getValue()
setValue(java.lang.String)
public int getVersion()
setVersion(int)
public void setVersion(int v)
バージョン0は、元のNetscape Cookie仕様に準拠しています。バージョン1はRFC 2109に準拠しています。
RFC 2109はまだ誕生してから時間がたっていないので、バージョン1は実験的なものとみなしてください。本番サイトではまだ使用しないでください。
訳注:RFC 2109は2017年現在はすでに失効しているぐらいに古い仕様です。 2017年現在有効なRFC 6265ではversion属性は存在しないので、この値がどう使用されるかはアプリケーションサーバーの仕様を確認したほうが良いでしょう。
v
- Cookieが元のNetscapeの仕様に準拠する必要がある場合は0;CookieがRFC 2109に準拠する必要がある場合は1getVersion()
public Object clone()
java.lang.Object.clone
をオーバーライドしてこのCookieのコピーを返します。public void setHttpOnly(boolean isHttpOnly)
HttpOnly のCookieはクライアント側のスクリプトコードに公開されないことになっているため、 特定の種類のクロスサイトスクリプティング攻撃を緩和するのに役立ちます。
isHttpOnly
- Cookieが HttpOnly の場合はture、それ以外の場合はfalsepublic boolean isHttpOnly()
Copyright © 1999-2017, Oracle and/or its affiliates. All Rights Reserved. Use is subject to license terms. Portions Copyright © 1999-2002 The Apache Software Foundation. Portions Copyright © 2017- @megascus. Translated by @megascus.