大家都知道,浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭与该用户的连接。因此当一个请求发送到WEB服务器时,无论其是否是第一次来访,服务器都会把它当作第一次来对待,这样的不好之处可想而知。为了弥补这个缺陷,Netscape开发出了cookie这个有效的工具来保存某个用户的识别信息,因此人们昵称为“小甜饼”。cookies是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段:Netscape Navigator使用一个名为cookies.txt本地文件保存从所有站点接收的Cookie信息;而IE浏览器把Cookie信息保存在类似于C:\\Windows\\cookies的目录下。当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。
cookies给网站和用户带来的好处非常多:
1、Cookie能使站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径
2、Cookie能告诉在线广告商广告被点击的次数,从而可以更精确的投放广告
3、Cookie有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点
4、Cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务
5、在电子商务会话中标识用户
一、Cookie的发送
1、创建Cookie对象,值的设定类似Map
2、设置最大时效
3、将Cookie对象放入Http响应报头
二、Cookie的读取
1、Servlet里要调用HttpServletRequest的getCookies方法,返回一个Cookie对象的数组
2、遍历数组,找到所需cookie。cookie.getName()得到cookie名字即键值,cookie.getValue()得到cookie的值
补充:Servlet或Jsp只发送了一个cookie,为什么还要遍历?
答:因为cookie与主机相关,而非Servlet或Jsp页面。因而,尽管Servlet可能只发送了一个cookie,也可能得到许多不想关的cookie。
示例代码
index.jsp
<body>
<a href="addCookie.jsp">写cookie</a>
<a href="readCookie.jsp">读cookie</a>
</body>
addCookie.jsp
<%
Cookie cookie = new Cookie("username","Ziccy");
cookie.setMaxAge(60);// 秒数
response.addCookie(cookie);
out.println("<h1>Cookie已写入,有效期为1分钟</h1>");
%>
readCookie.jsp
<%
Cookie[] cookies = request.getCookies();
boolean isFound = false;
for(Cookie cookie : cookies){
if("username".equals(cookie.getName())){
out.print("<h1>找到Cookie,值为:"+cookie.getValue()+"</h1>");
isFound=true;
break;
}
}
if(!isFound){
out.print("<h1>Cookie未找到</h1>");
}
%>