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讲解的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript单行代码,也就是代码片段

XSS:如何从 C# 中的字符串中删除 JS 片段?

cookie讲解

Python爬虫连载7-cookie的保存与读取SSL讲解

JavaWeb中Cookie和Session的讲解

session与cookie的讲解