cookie讲解
Posted 南山南
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cookie讲解相关的知识,希望对你有一定的参考价值。
1:cookie的核心机制:
客户端访问服务器是会从cookie存储区中查找是否有与该服务器对应的cookie信息,第一次访问是是不存在的,此时服务器接到请求信息后会生成该客户端与自己对应的唯一cookie,并放在响应头中响应给客户端,客户端收到后会将cookie信息存储到cookie存储区中,当再次访问时客户端会将cookie存储区中与该服务器对应的cookie取出一并请求过去,此时服务器就会认识此客户端。
1:会话级别的cookie,储存在内存里,当浏览器关闭后在访问,cookie消失
2:当利用方法setMaxAge(num)设置cookie的最大时效,将cookie进行持久化,
为0,则立即删除,负数,不储存,正数为存储时间
客户端第一次访问服务器时,由于cookie储存区中不存在cookie内容,所以第一次访问的请求头中没有cookie信息:
第一次访问服务器对应的请求头内容:
此时服务器收到客户端的请求信息后,服务器会生成该客户端与自己对应的唯一cookie并将相应内容放到响应头中返回给客户端,此时客户端会将对应服务器的cookie存放到cookie存储区中,待下次访问时进行调取:
服务器响应头信息:
客户端进行第二次或更多次访问时:
此时请求头对应的内容为:
服务器的相应信息:
核心代码:(具体的cookie存取和设置,参考ServletAPI中的cookie,
地址:http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html)
Cookie cookie=new Cookie("name","hi");
response.addCookie(cookie);
2:cookie模拟自动登录:
登录界面:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" session="false"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 11 <form action="index.jsp" method="post"> 12 name:<input type="text" name="user"/> 13 <input type="submit" value="Submit"/> 14 </form> 15 16 </body> 17 </html>
用表单模拟服务器:
1 <%@page import="org.apache.tomcat.util.http.Cookies"%> 2 <%@ page language="java" contentType="text/html; charset=UTF-8" 3 pageEncoding="UTF-8" session="false"%> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>Insert title here</title> 9 </head> 10 <body> 11 <% 12 //获取表单的参数 13 String name = request.getParameter("name"); 14 if(name != null && !name.trim().equals("")){ 15 //表单传递参数存在的时候,创建cookie,将数据放到cookie中 16 Cookie cookie = new Cookie("user",name); 17 //将cookie进行持久化,保存时间30秒 18 cookie.setMaxAge(30); 19 //服务器将cookie返回给客户端 20 response.addCookie(cookie); 21 } 22 else{ 23 //从cookie中获取 24 //当表单中没有数据时 ,也就是说用户没有经过登录界面,直接访问登录后才能访问的信息时 25 //此时就要用cookie,查找cookie中的信息用,cookie中的信息进行登录 26 Cookie[] cookies = request.getCookies(); 27 if(cookies != null && cookies.length>0){ 28 for(Cookie cookie : cookies){ 29 String userName=cookie.getName(); 30 if("user".equals(userName)){ 31 String val=cookie.getValue(); 32 //将对应的value值赋给request中的表单信息 33 name=val; 34 } 35 } 36 } 37 } 38 if(name != null && !name.trim().equals("")){ 39 out.print("Hello:"+name); 40 }else{ 41 response.sendRedirect("login.jsp"); 42 } 43 44 45 46 %> 47 </body> 48 </html>
3:利用cookie显示最近浏览的商品:
利用界面作为服务器:
1 <%@page import="java.util.List"%> 2 <%@page import="java.util.ArrayList"%> 3 <%@ page language="java" contentType="text/html; charset=UTF-8" 4 pageEncoding="UTF-8"%> 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 6 <html> 7 <head> 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 9 <title>Insert title here</title> 10 </head> 11 <body> 12 13 BookName:<%=request.getParameter("name") %> 14 <br><br> 15 <a href="books.jsp">return</a> 16 17 18 <% 19 20 String book = request.getParameter("name"); 21 /*1: 确定要删除的cookie */ 22 //把书的信息以cookie的方式传回给浏览器,并删除一个cookie 23 //确定要删除的cookie 24 //前提是:以"YINFU_book_"开头的cookie数量大于等于5个 25 Cookie[] cookies = request.getCookies(); 26 //用来保存所有以"YINFU_book_"开头的cookie(即:要被浏览的cookie) 27 List<Cookie> bookCookies = new ArrayList<Cookie>(); 28 //用来保存和books.jsp传入的book相匹配的那个cookie 29 Cookie tempCookie=null; 30 if(cookies != null && cookies.length>0){ 31 for(Cookie c : cookies){ 32 String cookieName=c.getName(); 33 if(cookieName.startsWith("YINFU_book_")){ 34 bookCookies.add(c); 35 if(c.getValue().equals(book)){ 36 tempCookie=c; 37 } 38 } 39 } 40 } 41 //当新传入的book信息不再cookie中,则删除第一个cookie 42 if(bookCookies.size() >= 5 && tempCookie==null){ 43 tempCookie = bookCookies.get(0); 44 } 45 //当传入的book在cookie中,就将对应的cookie删掉 46 if(tempCookie != null){ 47 //设置为0,则立即删除该cookie 48 tempCookie.setMaxAge(0); 49 response.addCookie(tempCookie); 50 } 51 /* 2:把books.jsp传入的book作为一个cookie返回 */ 52 Cookie cookie = new Cookie("YINFU_book_"+book, book ); 53 response.addCookie(cookie); 54 %> 55 56 </body> 57 </html>
显示浏览过的商品界面:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 11 <a href="book.jsp?name=java">java</a><br> 12 <a href="book.jsp?name=php">php</a><br> 13 <a href="book.jsp?name=javascript">javascript</a><br> 14 <a href="book.jsp?name=jQuery">jQuery</a><br> 15 <a href="book.jsp?name=servlet">servlet</a><br> 16 <a href="book.jsp?name=ajax">ajax</a><br> 17 <a href="book.jsp?name=struts2">struts2</a><br> 18 <br><br> 19 <% 20 Cookie[] cookies = request.getCookies(); 21 if(cookies != null && cookies.length>0){ 22 for(Cookie c : cookies){ 23 String cookieName=c.getName(); 24 if(cookieName.startsWith("YINFU_book_")){ 25 out.println(c.getValue()); 26 } 27 } 28 } 29 %> 30 31 </body> 32 </html>
以上是关于cookie讲解的主要内容,如果未能解决你的问题,请参考以下文章