Cookie技术

1. 什么是Cookie

Cookie,它指的是在客户端访问Web服务器的某个应用时,应用内的某个或某些组件会创建一部分数据(即Cookie),将其放置于响应的头部中(以Set-Cookie响应头的形式)发送给客户端浏览器,浏览器会根据服务器端的编程情况的不同,或将这个Cookie保存在浏览器的内存里(浏览器也是一个程序,运行时操作系统会为它维护一块内存),或将这个Cookie保存在客户端的硬盘上。当客户端再次访问服务器时,会将这部分数据(Cookie)一齐发送给服务器,服务器就可以根据这个Cookie来跟踪客户状态。通过这种方式,服务器就可以维护用户的状态。

Web服务器为了支持Cookie,需要具备以下功能:

1. 在HTTP响应结果中添加Cookie数据
2. 解析HTTP请求中的Cookie数据
浏览器为了支持Cookie,需要具备以下功能:

1. 解析HTTP响应结果中的Cookie数据
2. 把Cookie数据保存到本地硬盘
3. 读取本地硬盘上的Cookie数据,将其添加到HTTP请求中

2. Cookie的使用

(1)Cookie如何创建,如何添加到响应中

Tomcat作为Web服务器,对Cookie提供了良好的支持。那么运行在Tomcat中的Servlet该如何访问Cookie呢?幸运的是,Servlet无须直接和HTTP请求或响应中的原始Cookie数据打交道,这项工作由Servlet容器来完成。Cookie用javax.servlet.http.Cookie类来表示。其构造器为:

Cookie(String name, String value)
所以Cookie的创建和添加是极为简单的:

Cookie cookie=new Cookie("username","Tom");
response.addCookie(cookie);

(2)Cookie的查询

Cookie[ ] cookies=request.getCookies();
for(Cookie cookie:cookies){
out.println("cookie name:"+cookie.getName());
out.println("cookie value:"+cookiegetValue());
}
(3)Cookie的生存时间:

在默认情况下,Cookie会保存在浏览器的内存里,所以当浏览器关闭时,Cookie会丢失。当Servlet向客户端写Cookie时,可以通过Cookie类的setMaxAge(int expiry)方法来设置Cookie的生存期或者说有效时间。参数expiry以秒为单位,它具有以下含义:

expiry>0: 指示浏览器在客户端硬盘上保存Cookie的时间为expiry秒
expiry=0: 指示浏览器删除当前Cookie
expiry<0: 指示浏览器不要把Cookie保存到客户端硬盘,Cookie仅仅存在于当前浏览器的内存里,当浏览器关闭,Cookie即消失。Cookie默认的有效期为-1,即属于此种情况。
对于来自客户端的Cookie,Servlet可以通过Cookie类的getMaxAge()方法来读取Cookie的有效期。

(4)Cookie的编码问题

Cookie的值只能为ascii字符,所以对于中文,需要进行编码。譬如:

String name=URLEncoder.encode("张三","utf-8"); 
Cookie cookie=new Cookie("name",name); 
response.addCookie(cookie);

读取Cookie时,再使用URLDecoder.decode(String s,String enc)方法:

Cookie[] cookies=request.getCookies();
for(Cookie cookie:cookies){
String name=cookie.getName();
String value=cookie.getValue();
value=URLDecoder.decode(value,"utf-8");
out.println("cookie name:"+name+",cookie value:"+value);
}

(5)Cookie的路径问题

http://ip:port/appname/jsp01/jsp01.jsp中有:Cookie c=new Cookie(" "," ");

创建一个Cookie时,这个Cookie都会有一个默认的path,其值是创建该Cookie的组件的地址。此示例中,path为/appname/jsp01。

浏览器在访问服务器的某个组件时,会比较要访问的组件的地址addr和cookie的path,只有path>=addr,浏览器才会将cookie添加到请求中携带给服务器。

可以使用Cookie.setPath(" ")来修改cookie的默认path.

Cookie.setPath("/appname");
如果设置了如上path路径,则访问appname下的所有组件都会携带对应的cookie。

Cookie.setPath("/");
如果设置了如上的path路径,则访问同一个服务器内部的所有应用,都会携带对应的cookie。

Cookie.setDomain(".tarena.com.cn");
如果设置了如上的域名,则浏览器会先比较要访问的地址的域名是否匹配,然后再比较path。
3.Cookie的限制

1. Cookie只能保存字符串,并且对于中文,需要编码
2. Cookie的大小有限制(4K左右)
3. Cookie的个数有限制(浏览器能够在本地保存的Cookie的数量,大约为300)
4. Cookie不是很安全
5. Cookie可以被用户禁止
4. Cookie的使用场合

1. 记录用户的使用习惯
2. 网页换肤
3. 自动登录
4. 购物车(与Session配合使用)








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值