HTTP会话:cookie

Cookie是Web服务器保存在用户硬盘上的一段文本,Web服务器将它发送到浏览器。之后,当再次访问同一网络时,浏览器将它原封不动地返回。其中的信息片断以"名/值"对的形式存储。

Cookie用来对客户短期跟踪,记录客户的信息等。

 

一. Cookie的基本运作机制

Cookie的运作机制是由HTTP协议规定的。

当客户端首次请求访问服务器时,服务器现在客户端存放包含该客户信息的Cookie,以后客户端每次请求访问服务器时,都会在HTTP请求数据中包含Cookie,服务器解析HTTP请求中的Cookie,就能获得客户的相关信息。


 

 

二. 使用Cookie

1. 创建Cookie对象(javax.servlet.http.Cookie)

每个Cookie对象都包含一个Cookie名字和Cookie值。即Cookie的构造方法有两个参数:Cookie名称和Cookie值。

Cookie login=new Cookie("CookieName","John");

 

2. 服务端设置Cookie

 

设置Cookie的注释

login.setComment("Cookie Coment");
 

设置Cookie有效时间

创建Cookie并将它发送到浏览器后,默认情况下的Cookie是会话级的,Cookie仅仅存储在浏览器的进程中。用户退出浏览器后,Cookie将被删除。

通过setMaxAge(time)可以设置Cookie的有效期时间。时间以为单位。

例:将Cookie的生命设置为一天。

login.setMaxAge(60*60*24); 

如果设置的参数time>0,就指示浏览器在客户端硬盘上保存Cookie的时间为time秒。

如果设置的参数time=0,就指示浏览器删除当前Cookie。

如果设置的参数time<0,就指示浏览器不要把Cookie保存在客户端硬盘中。Cookie仅仅存在在当前浏览器进程中,当浏览器进程关闭,Cookie也就消失。

默认cookie的有效期为-1。

 

 

 

3. 发送Cookie到客户端

刚创建的Cookie存在于服务器内存中,必须将它发送到客户端,Cookie才能发挥作用.

发送Cookie,需要使用HttpServletResponse的addCookie方法,将Cookie插入到一个HTTP响应报头.

发送的语句如下:

public void doGet(HttpServletRequest req,HttpServletResponse res){
    Cookie login=new Cookie("CookieName","John");
    login.setComent("Cookie Coment");
    res.addCookie(login);
}

 

 

 

4. 从客户端读取Cookie

读取Cookie对象中的信息:

得到cookie的名称:cookie.getName();

得到cookie的值:cookie.getValue();

得到有效期:cookie.getMaxAge();

 

得到需要的Cookie对象

调用request.getCookies()得到一个Cookie对象数组。该数组包含了HTTP请求中的所有Cookie。如果在HTTP请求中没有任何Cookie,则request.getCookies()返回null。

例:得到Cookie名字为"username"的Cookie对象,并且打印出Cookie中的值。

Cookie resultCookie=null;
Cookie[] cookies=request.getCookies();
if(cookies!=null){
	for(int i=0;i<cookies.length;i++){
		if(cookies[i].getName().equals("username")){
			resultCookie=cookies[i];
			break;
		}
	}
}
System.out.println(cookies.getValue());

调用每个Cookie的getName()方法。调用getValue()方法得到相关Cookie的值。

 

 

设置Cookie的有效范围

假如App1应用的一个Web组件X在浏览器上保存了一个Cookie,当浏览器端再次请求访问app1,app2,app3应用中的其他Web组件时。在默认情况下。处于安全的原因,只有app1应用中的Web组件能读取该Cookie。

通过cookie.setPath(Strng path),cookie.setDemain(String domain)方法来设置Cookie的path和domain属性。

 

1. 例:Tomcat服务器A的app1应用生成cookie:

Cookie cookie=new Cookie("CookieName","tom");
cookie.setPath("/");
response.addCookie(cookie);

"/"表示根路径。也即表示,同一个Tomcat服务器中的所有Web应用可以共享cookie。

 

 

2. 例:Tomcat服务器A的app1应用生成cookie:

Cookie cookie=new Cookie("CookieName","tom");
cookie.setPath("/app2/");
response.addCookie(cookie);

只有Tomcat服务器A中的app2应用才能访问该cookie。app1也不能访问该cookie。

 

 

3. 例:Tomcat服务器A的app1应用生成cookie:

Cookie cookie=new Cookie("CookieName","tom");
cookie.setPath("/app1/sub");
response.addCookie(cookie);

只有Tomcat服务器A中的app1应用中位于"/sub"子路径下的Web组件才能访问该cookie。

 

 

4. 例:假定Tomcat服务器B中的所有Web应用访问Cookie,假定Tomcat服务器B域名为"www.cat.com"。Tomcat服务器A的app1应用生成cookie:

Cookie cookie=new Cookie("CookieName","tom");
cookie.setDemain(".cat.tom");
response.addCookie(cookie);

这样Tomcat服务器B也能访问该cookie。

注意setDemain(String domain)的domain必须以"."开头。参数具体格式参考RFC2109文档。

 

 

5. 例:假定Tomcat服务器B中的所有Web应用访问Cookie,假定Tomcat服务器B域名为"www.cat.com"。Tomcat服务器A的app1应用生成cookie:

Cookie cookie=new Cookie("CookieName","tom");
cookie.setDemain(".cat.tom");
cookie.setPath("/app3/");
response.addCookie(cookie);

表示仅仅希望Tomcat服务器B中的app3应用能访问该cookie。

 

  • 大小: 34.9 KB
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值