zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    记我安装Caffe的血泪史(1)
    UWP连接mysql 实现数据远程备份
    数据库性能测试
    性能瓶颈分析定位
    系统安全性测试
    WEB安全性测试点
    jmeter测试报告分析
    Linux常用命令大全
    软件测试入门到飞升上仙之客户端
    软件测试入门到飞升上仙之web 端测试
  • 原文地址:https://www.cnblogs.com/lubolin/p/7522082.html
Copyright © 2011-2022 走看看