参考一百度文库:
Cookie主要由Servlet容器来完成,用javax.servlet.http.Cookie类来实现,每一个Cookie对象包含一个Cookie名字和Cookie值,类似于map键值对。
1. 服务器写Cookie到浏览器:创建一个Cookie对象,然后调用HttpServletResponse对象的addCookie()方法,将Cookie添加到HTTP响应结果中,即将cookie写到客户端浏览器上。
Cookie theCookie=new Cookie("username","Tom");
response.addCookie(theCookie);
在Cookie构造方法中,第一个参数是Cookie的名字,第二个参数为Cookie值.
2. 服务器从浏览器读Cookie:如果读取来自客户端的Cookie,可以通过以下方式从HTTP请求中取得所有的Cookie值
Cookie cookie[]=request.getCookies();
该方法返回一个Cookie数组,如果HTTP中没有任何Cookie,那么getCookie返回null。
对于每一个Cookie对象,可以调用getName()方法来获得Cookie的名字,然后调用getValue()方法获得Cookie的值.
if(cookie!=null){
for(int i=0;i<cookie.length;i++){
out.println("Cookie name:"+cookie[i]);
out.println("Cookie value:"+cookie[i].getValue());
}
}
3.当Servlet向客户端写Cookie时,可以通过Cookie类的setMaxAge(int expiry)方法来设置Cookie的有效期,参数expiry以秒为单位,它具有以下含义:
如果expiry大于零,就指示浏览器在客户端硬盘上保存Cookie的时间为expiry秒;
如果expiry等于零,就指示删除当前的Cookie;
如果expiry小于零,就指示浏览器不要把Cookie保存到客户端硬盘.Cookie仅仅用于当前的浏览器进程中,当浏览器进程关闭,Cookie就得消失;
Cookie的默认值为-1,对于来自客户端的Cookie,Servlet首先通过Cookie类的getMaxAge()方法来读取Cookie的有效期;
修改名为Tom的Cookie值,修改为Jack
if(cookie.getValue().equals("Tom")){
cookie.setValue("Jack");
response.addCookie(cookie);
}
删除名为Jack的Cookie值
if(cookie.getValue().equals("Jack"))
{
cookie.setMaxAge(0);
response.addCookie(cookie);
}
4.恭喜Cookie
如果服务器A上面有两个应用app1,app2,同时在服务器B上有一个应用app3,用户通过同一个浏览器访问app1,app2,app3应用,假设在app1应用的Web组件X在浏览器上保存了一个Cookie,当再次请求访问app1,app2,app3,应用中的其他组件时,只有app1应用的web组件能读取该Cookie,如果想要改变Cookie的共享范围,那么app1应用的web组件的X在写Cookie时,可以通过setPath(String path)和setDomain(String domain)方法来设置Cookie的path和domain属性.
1.让同一个Tomcat服务器A中的app1应用和app2应用共享Cookie,app1应用中的Web组件X的写Cookie的代码如下:
Cookie cookie=new Cookie("username","Tom");
cookie.setPath("/");
response.addCookie(cookie);
以上设置setPath()参数为"/",表示Tomcat服务器的根路径,因此同一个服务器上的所有Web应用可以共享上述Cookie.
2.只能让Tomcat服务器A的app2应用访问Cookie,app1应用中的Web组件X的写Cookie的代码如下:
Cookie cookie=new Cookie("username","Tom");
cookie.setPath("/app2/");
response.addCookie(cookie);
以上设置setPath()参数为"/app2",表示Tomcat服务器A的app2应用可以访问Cookie,app1应用也无法访问该Cookie.
3.只能让Tomcat服务器A的app1的应用中位于"/sub"子路径下的Web组件访问Cookie,app1应用的Web组件X的写Cookie的代码如下:
Cookie cookie=new Cookie("username","Tom");
cookie.setPath("/app1/sub/");
response.addCookie(cookie);
以上设置setPath()参数为"/app1/sub/",表示Tomcat服务器A的app1应用的位于"/sub"子路径的组件可以访问Cookie.
4.让Tomcat服务器B上的所有WEb应用访问Cookie,假定Tomcat服务器B的域名为为"www.cat.com",app1应用中的Web组件X的写Cookie的代码如下:
Cookie cookie=new Cookie("username","Tom");
cookie.setDomain(".cat.com"); //该参数必须以"."开头
cookie.setPath("/app3/");
response.addCookie(cookie);