首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

HTTP对话:cookie

2012-12-19 
HTTP会话:cookieCookie是Web服务器保存在用户硬盘上的一段文本,Web服务器将它发送到浏览器。之后,当再次访

HTTP会话:cookie

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

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

?

一. Cookie的基本运作机制

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

当客户端首次请求访问服务器时,服务器现在客户端存放包含该客户信息的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。

?

热点排行