从以下几个方面总结
[list]
[b][*]cookie的概念
[*]cookie的使用场景
[*]cookie的运行机制
[*]cookie的常用操作
[*]cookie的共享范围
[*]cookie的生命周期[/b]
[/list]
[b]cookie的概念:[/b]
cookie是客户端(浏览器)访问服务器时,由服务器发送给客户端的一小段信息,就好象是服务器送给客户端的“点心”。cookie相关的规范是HTTP协议的一部分,它的出现主要是由于HTTP协议的“无状态”特点所决定的。也就是说WEB服务器好比是"超市"售货员,他只管买东西,不关心是客户是谁,进行“不记名”响应请求,这样做主要是为了简单。但在实际web开发中我们又需要跟踪用户,比如网上购物中的“购物车”。因为为了解决该问题,cookie出现了。
[b]cookie的使用场景[/b]
[list]
[*]在电子商务会话中标识用户
[*]记录用户名/密码
[*]定制网站
[*]定向广告
[/list]
[b]cookie的运行机制[/b]
如图所示
[img]http://dl.iteye.com/upload/attachment/453435/790ead6a-af30-3848-87da-fddb22c1bf15.png[/img]
Cookie的运行机制是由HTTP协议规定的,多数Web服务器和浏览器都支持Cookie。Web服务器为了支持Cookie,需要具备以下功能:
在HTTP响应结果中添加Cookie数据
解析HTTP请求中的Cookie数据
浏览器为支持Cookie,需要具备以下功能:
解析HTTP响应结果中的Cookie数据
把Cookie数据保存到本地硬盘
读取本地硬盘上的Cookie数据,把它添加到HTTP请求中
另外,浏览器发送请求时,Cookie信息是在HTTP协议的请求头中的:
[b]cookie常见操作[/b]
首先cookie的格式就是名值对,比如 userName = "Tom",所以cookie中只能保存字符串。另外,浏览器中可以保存多个cookie。服务器对Cookie可以进行添加、读取、修改、删除的操作。
添加操作:
读取操作:
修改操作:
[b]cookie的生命周期[/b]
Java中的Servlet向客户端写Cookie时,可以通过Cookie类的getMaxAge(int expiry)方法来设置Cookie的有效期,expiry以秒为单位,它具有以下含义:
如果expiry > 0,指示浏览器在客户端硬盘上保存Cookie的时间为expiry秒;
如果 expiry = 0,指示浏览器删除当前Cookie;
如果 expiry < 0,指示浏览器不要把Cookie保存到硬盘中,Cookie仅存在与当前浏览器进程中,当浏览器进程关闭后,Cookie立即消失,这就是所谓的“会话Cookie”;
[b]cookie的生命周期[/b]
[img]http://dl.iteye.com/upload/attachment/453462/93e4ccc9-10ce-300a-bed1-d9f802d14ada.png[/img]
假定app1中Xweb组件在浏览器中保存了一个Cookie,当再次访问app1、app2、app3中的其它web组件时候,浏览器是否会把Cookie添加到HTTP请求中?
在默认情况下,只有app1中的Web组件能读取该Cookie。如果想改变Cookie的贡献范围,可以通过setPath()和setDomain(String domain)方法来设置。
让同一个Tomcat服务器A中app1和app2共享Cookie,那么app1中的组件在写Cookie的代码如下:
setPath方法中“/”表示是服务器的根路径。
只能让app2访问Cookie,则app1中的组件写Cookie的代码如下
只能让app1下的sub目录下组件访问Cookie,则app1中的组件写Cookie的代码如下
让服务器B中app3下所有Web应用访问Cookie,则app1中的组件写Cookie的代码如下
[list]
[b][*]cookie的概念
[*]cookie的使用场景
[*]cookie的运行机制
[*]cookie的常用操作
[*]cookie的共享范围
[*]cookie的生命周期[/b]
[/list]
[b]cookie的概念:[/b]
cookie是客户端(浏览器)访问服务器时,由服务器发送给客户端的一小段信息,就好象是服务器送给客户端的“点心”。cookie相关的规范是HTTP协议的一部分,它的出现主要是由于HTTP协议的“无状态”特点所决定的。也就是说WEB服务器好比是"超市"售货员,他只管买东西,不关心是客户是谁,进行“不记名”响应请求,这样做主要是为了简单。但在实际web开发中我们又需要跟踪用户,比如网上购物中的“购物车”。因为为了解决该问题,cookie出现了。
[b]cookie的使用场景[/b]
[list]
[*]在电子商务会话中标识用户
[*]记录用户名/密码
[*]定制网站
[*]定向广告
[/list]
[b]cookie的运行机制[/b]
如图所示
[img]http://dl.iteye.com/upload/attachment/453435/790ead6a-af30-3848-87da-fddb22c1bf15.png[/img]
Cookie的运行机制是由HTTP协议规定的,多数Web服务器和浏览器都支持Cookie。Web服务器为了支持Cookie,需要具备以下功能:
在HTTP响应结果中添加Cookie数据
解析HTTP请求中的Cookie数据
浏览器为支持Cookie,需要具备以下功能:
解析HTTP响应结果中的Cookie数据
把Cookie数据保存到本地硬盘
读取本地硬盘上的Cookie数据,把它添加到HTTP请求中
另外,浏览器发送请求时,Cookie信息是在HTTP协议的请求头中的:
HTTP/1.1 200 OK
Server:Apache-Coyote/1.1
[b]Set-cookie:userName=TOM;[/b]
Content-Type:text/plain
[b]cookie常见操作[/b]
首先cookie的格式就是名值对,比如 userName = "Tom",所以cookie中只能保存字符串。另外,浏览器中可以保存多个cookie。服务器对Cookie可以进行添加、读取、修改、删除的操作。
添加操作:
Cookie theCookie = new Cookie("userName","TOM");
response.addCookie(theCookie);
读取操作:
Cookie cookies[] = request.getCookies();
for(int i = 0; i < cookies.length; i++){
out.println("Cookie name:" + cookie[i].getName());
out.println("Cookie vale:" + cookie[i].getValue());
}
修改操作:
Cookie cookies[] = request.getCookies();
for(int i = 0; i < cookies.length; i++){
if(cookie[i].getName().equals("TOM"))
cookie[i].setValue("JACK");
}
[b]cookie的生命周期[/b]
Java中的Servlet向客户端写Cookie时,可以通过Cookie类的getMaxAge(int expiry)方法来设置Cookie的有效期,expiry以秒为单位,它具有以下含义:
如果expiry > 0,指示浏览器在客户端硬盘上保存Cookie的时间为expiry秒;
如果 expiry = 0,指示浏览器删除当前Cookie;
如果 expiry < 0,指示浏览器不要把Cookie保存到硬盘中,Cookie仅存在与当前浏览器进程中,当浏览器进程关闭后,Cookie立即消失,这就是所谓的“会话Cookie”;
[b]cookie的生命周期[/b]
[img]http://dl.iteye.com/upload/attachment/453462/93e4ccc9-10ce-300a-bed1-d9f802d14ada.png[/img]
假定app1中Xweb组件在浏览器中保存了一个Cookie,当再次访问app1、app2、app3中的其它web组件时候,浏览器是否会把Cookie添加到HTTP请求中?
在默认情况下,只有app1中的Web组件能读取该Cookie。如果想改变Cookie的贡献范围,可以通过setPath()和setDomain(String domain)方法来设置。
让同一个Tomcat服务器A中app1和app2共享Cookie,那么app1中的组件在写Cookie的代码如下:
Cookie cookie = new Cookie("userName","TOM");
cookie.setPath("/");
response.addCookie(cookie);
setPath方法中“/”表示是服务器的根路径。
只能让app2访问Cookie,则app1中的组件写Cookie的代码如下
Cookie cookie = new Cookie("userName","TOM");
cookie.setPath("/app2/");
response.addCookie(cookie);
只能让app1下的sub目录下组件访问Cookie,则app1中的组件写Cookie的代码如下
Cookie cookie = new Cookie("userName","TOM");
cookie.setPath("/app1/sub/");
response.addCookie(cookie);
让服务器B中app3下所有Web应用访问Cookie,则app1中的组件写Cookie的代码如下
Cookie cookie = new Cookie("userName","TOM");
cookie.setDomain(".cat.com");
response.addCookie(cookie);