public final class HttpCookie extends Object implements Cloneable
有3个HTTP cookie规范:
Netscape draft
RFC 2109 - http://www.ietf.org/rfc/rfc2109.txt
RFC 2965 - http://www.ietf.org/rfc/rfc2965.txt
HttpCookie类可以接受所有这三种形式的语法。
Constructor and Description |
---|
HttpCookie(String name, String value)
构造具有指定名称和值的cookie。
|
Modifier and Type | Method and Description |
---|---|
Object |
clone()
创建并返回此对象的副本。
|
static boolean |
domainMatches(String domain, String host)
检查主机名是否在域中的实用方法。
|
boolean |
equals(Object obj)
测试两个HTTP Cookie的相等性。
|
String |
getComment()
返回描述此cookie用途,或评论
null 如果cookie没有注释。
|
String |
getCommentURL()
返回描述这个cookie,或者用途的注释URL
null 如果cookie没有注释URL。
|
boolean |
getDiscard()
返回cookie的丢弃属性
|
String |
getDomain()
返回为此cookie设置的域名。
|
long |
getMaxAge()
返回cookie的最大使用年限,以秒为单位。
|
String |
getName()
返回cookie的名称。
|
String |
getPath()
返回浏览器返回此Cookie的服务器上的路径。
|
String |
getPortlist()
返回cookie的端口列表属性
|
boolean |
getSecure()
返回
true 如果发送此cookie应该被限制为一个安全协议,或者
false 如果可以使用任何协议发送。
|
String |
getValue()
返回cookie的值。
|
int |
getVersion()
返回该Cookie符合的协议版本。
|
boolean |
hasExpired()
报告此HTTP Cookie是否已过期。
|
int |
hashCode()
返回此HTTP cookie的哈希码。
|
boolean |
isHttpOnly()
返回
true 如果这个Cookie包含
HTTPOnly属性。
|
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。
|
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的名称。
该值可以是服务器选择发送的任何值。 它的价值可能只对服务器感兴趣。 使用setValue
方法创建后,cookie的值可以更改。
默认情况下,根据RFC 2965 cookie规范创建Cookie。 版本可以使用setVersion
方法更改。
name
- 一个
String
cookie名称的String
value
-
String
指定cookie的值
IllegalArgumentException
- 如果cookie名称包含非法字符
NullPointerException
- 如果
name
是
null
setValue(java.lang.String)
,
setVersion(int)
public static List<HttpCookie> parse(String header)
header
- 一个String
set-cookie标题的String。
标题应以“set-cookie”或“set-cookie2”标记开头;
或者它应该没有领先的标记。
IllegalArgumentException
- 如果头字符串违反了cookie规范的语法,或者cookie名称包含非法字符。
NullPointerException
- 如果标题字符串是
null
public boolean hasExpired()
true
以表示此HTTP cookie已过期;
否则, false
public void setComment(String purpose)
purpose
- a
String
要向用户显示的注释
getComment()
public String getComment()
null
如果cookie没有注释。
String
包含评论,或
null
如果没有
setComment(java.lang.String)
public void setCommentURL(String purpose)
purpose
- a
String
要向用户显示的注释URL
getCommentURL()
public String getCommentURL()
null
如果cookie没有注释URL。
String
注释URL的
null
如果没有,
null
setCommentURL(java.lang.String)
public void setDiscard(boolean discard)
discard
-
true
无条件丢弃cookie
getDiscard()
public boolean getDiscard()
boolean
代表这个cookie的丢弃属性
setDiscard(boolean)
public void setPortlist(String ports)
ports
- a
String
指定端口列表,它是逗号分隔的数字系列
getPortlist()
public String getPortlist()
String
包含端口列表或
null
如果没有
setPortlist(java.lang.String)
public void setDomain(String pattern)
域名的格式由RFC 2965指定。域名以点( .foo.com
)开头,意味着cookie对于指定的域名系统(DNS)区域中的服务器是可见的(例如www.foo.com
,但不是a.b.foo.com
)。 默认情况下,Cookie只返回给发送它们的服务器。
pattern
- 一个String
,其中包含该Cookie可见的域名;
形式根据RFC 2965
getDomain()
public String getDomain()
String
域名的
String
setDomain(java.lang.String)
public void setMaxAge(long expiry)
一个正值表示cookie会在经过很多秒后过期。 请注意,该值是cookie将过期的最大年龄,而不是Cookie的当前年龄。
负值表示Cookie不会持久存储,并且Web浏览器退出时将被删除。 零值会导致cookie被删除。
expiry
- 指定cookie的最大年龄(以秒为单位)的整数;
如果为零,则应立即丢弃该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
指定包含servlet名称的路径,例如
/ catalog
setPath(java.lang.String)
public void setSecure(boolean flag)
默认值为false
。
flag
- 如果true
,则只能通过HTTPS等安全协议发送cookie。
如果false
,它可以通过任何协议发送。
getSecure()
public boolean getSecure()
true
如果发送这个cookie应该被限制在一个安全的协议,或
false
如果它可以使用任何协议发送。
false
如果cookie可以通过任何标准协议发送;
否则, true
setSecure(boolean)
public String getName()
String
cookie名称的String
public void setValue(String newValue)
对于版本0的Cookie,值不应包含空格,括号,括号,等号,逗号,双引号,斜线,问号,符号,冒号和分号。 空值在所有浏览器上的行为可能不一样。
newValue
- a
String
指定新值
getValue()
public String getValue()
String
包含cookie的现值
setValue(java.lang.String)
public int getVersion()
setVersion(int)
public void setVersion(int v)
v
- 0如果cookie应该符合原始的Netscape规范;
1如果cookie应符合RFC 2965/2109
IllegalArgumentException
- 如果
v
既不是0也不是1
getVersion()
public boolean isHttpOnly()
true
如果这个Cookie包含HTTPOnly属性。
这意味着脚本引擎不能访问cookie,比如javascript。
true
如果这个cookie应该被认为是HTTPOnly
setHttpOnly(boolean)
public void setHttpOnly(boolean httpOnly)
true
这意味着脚本引擎(如JavaScript)不应该访问该cookie。
httpOnly
- 如果
true
使cookie cookie,即仅作为HTTP请求的一部分可见。
isHttpOnly()
public static boolean domainMatches(String domain, String host)
这个概念在cookie规范中描述。 要理解这个概念,需要首先定义一些术语:
effective host name = hostname if host name contains dot
or = hostname.local if not
主机A的名称域 - 匹配主机B的,如果:
- their host name strings string-compare equal; or
- A is a HDN string and has the form NB, where N is a non-empty name string, B has the form .B', and B' is a HDN string. (So, x.y.com domain-matches .Y.com but not Y.com.)
如果主机不在域中(RFC 2965秒3.3.2):
- The value for the Domain attribute contains no embedded dots, and the value is not .local.
- The effective host name that derives from the request-host does not domain-match the Domain attribute.
- The request-host is a HDN (not IP address) and has the form HD, where D is the value of the Domain attribute, and H is a string that contains one or more dots.
例子:
- A Set-Cookie2 from request-host y.x.foo.com for Domain=.foo.com would be rejected, because H is y.x and contains a dot.
- A Set-Cookie2 from request-host x.foo.com for Domain=.foo.com would be accepted.
- A Set-Cookie2 with Domain=.com or Domain=.com., will always be rejected, because there is no embedded dot.
- A Set-Cookie2 from request-host example for Domain=.local will be accepted, because the effective host name for the request- host is example.local, and example.local domain-matches .local.
domain
- 用于检查主机名的域名
host
- 有问题的主机名
true
如果他们的域匹配;
false
如果没有
public String toString()
public boolean equals(Object obj)
只有两个Cookie来自同一个域(不区分大小写),具有相同的名称(不区分大小写),并具有相同的路径(区分大小写),结果是true
。
equals
在
Object
obj
- 与之比较的参考对象。
true
如果两个HTTP cookies相互等价;
否则, false
Object.hashCode()
, HashMap
public int hashCode()
getName().toLowerCase().hashCode()
+ getDomain().toLowerCase().hashCode()
+ getPath().hashCode()
hashCode
在
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)