java.lang.Object java.net.HttpCookie
HttpCookie 对象表示一个 http cookie,该 cookie 带有服务器和用户代理之间的状态信息。广泛采用 Cookie 来创建有状态 (stateful) 会话。
有 3 种 http cookie 规范:
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) 测试两个 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 ;如果浏览器可以使用任何协议发送 cookie,则返回 false 。 |
String |
getValue() 返回 cookie 的值。 |
int |
getVersion() 返回此 cookie 遵守的协议版本。 |
boolean |
hasExpired() 报告此 http cookie 是否已过期。 |
int |
hashCode() 返回此 http cookie 的哈希码。 |
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 |
setMaxAge(long expiry) 设置 cookie 的最大生存时间,以秒为单位。 |
void |
setPath(String uri) 指定客户机应该返回 cookie 的路径。 |
void |
setPortlist(String ports) 指定 cookie 的端口列表,该列表在 Cookie 头中限制可能将 cookie 发送回的端口。 |
void |
setSecure(boolean flag) 指示浏览器是否只能使用安全协议(如 HTTPS 或 SSL)发送 cookie。 |
void |
setValue(String newValue) 在创建 cookie 之后将新值分配给 cookie。 |
void |
setVersion(int v) 设置此 cookie 遵守的 cookie 协议版本。 |
String |
toString() 构造此 cookie 的一个 cookie 头字符串表示形式,其格式为对应的 cookie 规范定义的格式,但没有前导 "Cookie:" 标记。 |
从类 java.lang.Object 继承的方法 |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
构造方法详细信息 |
---|
public HttpCookie(String name, String value)
名称必须遵守 RFC 2965。这意味着它只能包含 ASCII 字母数字字符,不能包含逗号、分号或空格,也不能以 $ 字符开头。cookie 的名称在创建之后不得更改。
该值可以是服务器选择发送的任何值。可能只有该服务器需要其值。cookie 的值在使用 setValue
方法创建后可以更改。
默认情况下,根据 RFC 2965 cookie 规范创建 cookie。可以使用 setVersion
方法更改版本。
name
- 指定 cookie 名称的
String
value
- 指定 cookie 值的
String
IllegalArgumentException
- 如果 cookie 名称包含非法字符,或者它是保留给 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 名称包含非法字符;或者 cookie 名称是保留给 cookie 协议使用的标记之一
NullPointerException
- 如果头字符串为
null
public boolean hasExpired()
public void setComment(String purpose)
purpose
- 一个
String
,指定要显示给用户的注释
getComment()
public String getComment()
null
。
String
;如果没有注释,则返回
null
setComment(java.lang.String)
public void setCommentURL(String purpose)
purpose
- 一个
String
,指定要显示给用户的注释 URL
getCommentURL()
public String getCommentURL()
null
。
String
;如果没有,则返回
null
setCommentURL(java.lang.String)
public void setDiscard(boolean discard)
discard
-
true 表示无条件丢弃 cookie
getDiscard()
public boolean getDiscard()
setDiscard(boolean)
public void setPortlist(String ports)
ports
- 指定端口列表的
String,它是以逗号分隔的数字序列
getPortlist()
public String getPortlist()
setPortlist(java.lang.String)
public void setDomain(String pattern)
RFC 2965 指定了域名的形式。域名以点 (.foo.com
) 开头,意味着在指定域名系统(Domain Name System,DNS)区域中(例如,www.foo.com
,但不是 a.b.foo.com
)cookie 对于服务器是可见的。默认情况下,cookie 只返回给发送它们的服务器。
pattern
- 包含域名(在其中此 cookie 可见)的
String
;域名形式符合 RFC 2965
getDomain()
public String getDomain()
String
setDomain(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 的 servlet,例如 /catalog,它使 cookie 对于服务器上 /catalog 下的所有目录都是可见的。
有关设置 cookie 路径名称的更多信息,请参考 RFC 2965(可从 Internet 上获得)。
uri
- 指定路径的
String
getPath()
public String getPath()
String
,例如
/catalog
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()
String
public void setValue(String newValue)
对于 Version 0 cookie,值不应包含空格、方括号、圆括号、等号、逗号、双引号、斜杠、问号、at 符号、冒号和分号。空值在所有浏览器上的行为不一定相同。
newValue
- 指定新值的
String
getValue()
public String getValue()
String
setValue(java.lang.String)
public int getVersion()
setVersion(int)
public void setVersion(int v)
v
- 如果 cookie 应该遵守原始 Netscape 规范,则 v 为 0;如果 cookie 应该遵守 RFC 2965/2109,则 v 为 1
IllegalArgumentException
- 如果
v 既不为 0,也不为 1
getVersion()
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 是包含一个或多个圆点的字符串。
示例:
- 对于 Domain=.foo.com,来自请求主机 y.x.foo.com 的 Set-Cookie2 将被拒绝,因为 H 是 y.x,包含一个圆点。
- 对于 Domain=.foo.com,来自请求主机 x.foo.com 的 Set-Cookie2 将被接受。
- 带有 Domain=.com 或 Domain=.com. 的 Set-Cookie2 将始终被拒绝,因为没有嵌入的圆点。
- 带有 Domain=ajax.com 的 Set-Cookie2 将被接受,Domain 的值将被赋予 .ajax.com,因为在值前面加了一个圆点。
- 对于 Domain=.local,来自请求主机示例的 Set-Cookie2 将被接受,因为请求主机的有效主机名是 example.local,example.local 在域上匹配 .local。
domain
- 要用于检查主机名的域名
host
- 相关主机名
public String toString()
public boolean equals(Object obj)
仅当两个 cookie 来自相同域(不区分大小写)、具有相同名称(不区分大小写)并具有相同路径(区分大小写)时,结果才为 true。
obj
- 要与之比较的引用对象。
Object.hashCode()
,
Hashtable
public int hashCode()
getName().toLowerCase().hashCode()
+ getDomain().toLowerCase().hashCode()
+ getPath().hashCode()
Object.equals(java.lang.Object)
,
Hashtable
public Object clone()