Cookie的含义是“服务器送给浏览器的甜点”,即服务器在响应请求时能够将一些数据以“键-值”对的形式经过响应信息保存在客户端。当浏览器再次访问服务器中相同的应用时,会将以前的Cookie经过请求信息带到服务器端。
html
下面的Servlet展现了Cookie的功能。 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String option = request.getParameter("option"); if ("show".equals(option)) { //得到请求信息中的Cookie数据 Cookie[] cookies = request.getCookies(); if (cookies != null) { //找出名称(键)为“cool”的Cookie for (int i = 0; i < cookies.length; i++) { if ("cool".equals(cookies[i].getName())) { out.println("<h2>" + cookies[i].getName() + ":" + cookies[i].getValue() + "</h2>"); } } } } else if ("add".equals(option)) { //建立Cookie对象 Cookie cookie = new Cookie("cool", "yeah!"); //设置生命周期以秒为单位 cookie.setMaxAge(20); //添加Cookie response.addCookie(cookie); } 该Servlet对应的url-pattern为/testCookie 当浏览器请求地址“.../tst/testCookie?option=add”时,该Servlet建立一个Cookie对象,存储的键-值对为 “cool”-“yeah”。经过response的addCookie方法将该Cookie信息添加到相应信息中。须要注意的是cookie的 setMaxAge方法用于设置该cookie生命周期,单位是秒,若是过了这个期间,Cookie将失效。setMaxAge方法的参数若是为负值则表 示该Cookie将在浏览器关闭时过时,若是参数为0则表示马上删除该Cookie。访问该地址,对应的请求和响应的HTTP信息为: 请求: GET /tst/testCookie?option=add HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, ** Accept-Language: zh-cn UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1) Host: 192.168.5.100:8080 Connection: Keep-Alive Cookie: cool=yeah! 响应: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/html;charset=ISO-8859-1 Content-Length: 21 Date: Sun, 29 Jun 2008 06:15:26 GMT <h2>cool:yeah!</h2> 注意,请求协议头中用于携带cookie信息的格式。
Cookie能够用于保持用户的会话状态,但Cookie信息保存在客户端,存在较大的安全隐患,且通常浏览器对Cookie的数目及数据大小有严格的限制。在Web应用中,通常状况下经过HttpSession对象保持会话状态。 java
每一个Cookie均可以设置一个最大生命周期,若是设置了该值,浏览器将会把该Cookie写到硬盘上。若是没有设置Cookie的最大生命周期,这样的Cookie称为会话Cookie,它存在内存中,当浏览器关闭时,该Cookie消失。浏览器
下一篇介绍(session实现机制)
安全