Cookies集合具有以下几种属性:
1.Expires属性:此属性用来给Cookies设置一个期限,在期限内只要打开网页就可以调用被保存的Cookies,如果过了此期限Cookies就自动被删除。
如: 设定Cookies的有效期到2004年4月1日,到时将自动删除。如果一个Cookies没有设定有效期,则其生命周期从打开浏览器开始,到关闭浏览器结束,每次运行后生命周期将结束,下次运行将重新开始。
2.Domain属性:这个属性定义了Cookies传送数据的唯一性。若只将某Cookies传送给_blank">搜狐主页时,则可使用如下代码:
3.Path属性:定义了Cookies只发给指定的路径请求,如果Path属性没有被设置,则使用应用软件的缺省路径。
4.Srcure属性:指定Cookies能否被用户读取。
5.Haskeys属性:如果所请求的Cookies是一个具有多个键值的Cookies字典,则返回True,它是一个只读属性
<
%
}
%
>
name
value
<
%=name%
>
<
%=svalue%
>
........(
其他内容
)
这一小段
JSP
文件可以读出用户硬盘上的所有有效的
Cookie
,也就是仍然在存
活期内的
Cookie
文件。并用表格的形式列出每个
Cookie
的名字和内容。
我们来逐行分析一下这段代码:
Cookie cookies[]=request.getCookies()
我们用
request.getCookies()
读出
用户硬盘上的
Cookie
,并将所有的
Cookie
放到一个
cookie
对象数组里面。
接下来我们用一个循环语句遍历刚才建立的
Cookie
对象数组,我们用
sCookie=cookies[i]
取出数组中的一个
Cookie
对象,然后我们
用
sCookie.getValue()
和
sCookie.getName()
两个方法来取得这个
Cookie
的名字
和内容。
通过将取出来的
Cookie
的名字和内容放在字符串变量中,我们就能对其进行各
种操作了。在上面的例子里,可通过循环语句的遍历,将所有
Cookie
放在一张
表格中进行显示。
==================================
=====
四、
需要注意的一些问题
通过上面两个简单的例子,可以看到,用
JSP
进行
Cookie
的操作,是非常简单
的。不过我们在实际操作中还要注意一些问题:
1. Cookie
的兼容性问题
Cookie
的格式有
2
个不同的版本,第一个版本,我们称为
Cookie Version 0
,
是最初由
Netscape
公司制定的,也被几乎所有的浏览器支持。而较新的版本,
Cookie Version 1
,则是根据
RFC 2109
文档制定的。为了确保兼容性,
JAVA
规
定,
前面所提到的涉及
Cookie
的操作都是针对旧版本的
Cookie
进行的。
而新版
本的
Cookie
目
前还不被
Javax.servlet.http.Cookie
包所支持。
2. Cookie
的内容
同样的
Cookie
的内容的字符限制针对不同的
Cookie
版本也有不同。在
Cookie
Version
0
中,某些特殊的字符,例如:空格,方括号,圆括号,等于号(
=
),
逗号,双引号,斜杠,问号,
@
符号,冒号,分号都不能作为
Cookie
的内容。这
也就
是为什么我们在例子中设定
Cookie
的内容为
"Test_Content"
的原因。
虽然在
Cookie Version 1
规定中放宽了限制,可以使用这些字符,但是考虑到
新版本的
Cookie
规范目前仍然没有为所有的浏览器所支持,因而为保险起见,
我们应该在
Cookie
的内容中尽量避免使用这些字符。
(
3.cookie
的删除
cookie
为什么删除不了
,
所以写了给小总结
,
希望对用
cookie
的各位兄弟有帮助
对于
cookie,
最主要的当然是读取和设置了
,
下面分两方面说明
.
一、设置
Cookie
是通过
HttpServletResponse
的
addCookie
方法加入到
Set-Cookie
应答头中的
例如:
Cookie userCookie = new Cookie("user", "admin");
response.addCookie(userCookie);
和设置有关系的还有以下两个重要方法
1.setMaxAge
设置
Cookie
过期之前的时间,以秒计。如果不设置该值,则
Cookie
只在当前会话内有效,
而且这些
Cookie
不会保存到磁盘上。
注意:删除
cookie
就是通过该方法实现的。将要删除的
cookie
的过期之前的时间指定为
0
就可以达到删除该
cookie
的目的。
2.setPath
设置
Cookie
适用的路径。如果不指定路径,
Cookie
将返回给当前页面
(JSP
页面或者
Servlet
的映射
)所在目录及其子目录下的所有页面。
注意:
A:所有的cookie都是有路径的
B:该方法设置的路径为客户端路径,即“/”代表服务器根目录,而不是WEB应用根目录
C:该方法设置路径时,“/myWeb/”与“/myWeb”是不同的,要特别注意;前者可以关联到服务器的myWeb目录下,而或者则不可以。
D:该方法设置路径时,没有相对目录可言,即不论在哪个目录下设置setPath(“/myWeb/”),该cookie都将关联到服务器的myWeb目录下(setPath(“/myWeb”)则不可以),而不是当前目录的myWeb的子目录下;同样,设置setPath(“myWeb/”)和setPath(“myWeb”)也不能关联到当前目录的myWeb的子目录下这里有个奇怪的例子,就是在一个web应用下设置的cookie可以在另一个web应用下获得(两个web应用在同一个服务器下)
目录结构:在服务器根目录上有web1和web2两个目录,在web1下有setcookie.jsp和getcookie.jsp、在web2下有getcookie.jsp web1下的setcookie.jsp
web1下的getcookie.jsp web2下的getcookie.jsp 先访问web1下的setcookie.jsp,然后分别访问web1和web2下面getcookie.jsp文件,你会发现奇怪的现象,web1下的getcookie.jsp中user为空而web2下的getcookie.jsp中user却有值,这就实现了从一个web应用下设置的cookie 在另一个web应用下获得。
大多数人删除cookie不成功都是因为目录原因。一个典型的原因是在某一个目录中设置了cookie(没有调用setPath方法)却在另一个目录中删除该cookie(其实是调用setMaxAge方法)
二、读取
从客户端读取Cookie时调用的是
HttpServletRequest的getCookies方法。该方法返回一个与HTTP请求头中的内容对应的Cookie对象数组。得到这个数组之后,一般是用循环访问其中的各个元素,调用getName检查各个Cookie的名字,直至找到目标Cookie。然后对
这个目标Cookie调用getValue,根据获得的结果进行其他处理。
注意:若JSP和Servlet所在目录(Servlet为其映射目录)的父目录中有同名cookie,则request.getCookie()方法得到的Cookie数组中保存的是其父目录中的cookie的信息;