Cookies

1.HTTP 协议无状态协议,无法识别来自于同一个请求的识别,作为WEB服务器,必须采用一种机制唯一标识一个用户

2.会话:WEB和客户端之间一系列的请求和响应过程,Servlet规范中,常用两种机制完成会话跟踪:Cookies和Seesion

  1.问题一:WEb服务器如何知道请求消息来自同一个客户端:

        需要浏览器对其发生的每一个请求消息进行标识,同一个会话的请求消息有相同的标识(Seesion ID)

3.Cookie机制:客户端保持HTTP状态信息方案,

  2).简单的GET请求,在响应信息头中发现了Cookie,再一次请求过程中发现了自动的加入SetCookie,还有第一次请求时候没有Cookie头,再一次访问浏览器自动加入Cookie

 

 1// 简单的Cookie表示  
 2              //获取Cookies
 3              Cookie []cookies=request.getCookies();
 4              if(cookies!=null && cookies.length>0)
 5              {
 6                  for(Cookie cook:cookies)
 7                  {
 8                      out.print(cook.getName()+":"+cook.getValue());
 9                      out.print("<br>");
10                  }
11              }
12              else
13              {
14                  out.print("没有一个cookie,创建一个cookie,并且返回");
15                  Cookie cookie=new Cookie("name","jerry");
16                  response.addCookie(cookie);
17              }

3).会话级别Cookie,默认情况没有设置setMaxAge时候,用户退出浏览器会自动的删除cookie;0时候表示快速被删除

  会话Cookie和持久Cookie区别:


 5.使用Cookie进行自动登录设置

   1.获取登录参数信息,并且把登录信息存储到cookie中设置最大时效30S

    2.从cookie读取用户信息,并且打印欢迎信息

  3.没有请求参数和登录信息重定向到login.jsp

6.利用cookies 显示最近需要看过的东西

    最重要是在删除部分 ;第一种情况是 数量大于5并且新加入的书籍并没有出现过删除第一个Cookie进行,第二种情形:Update更新,加入书籍存在于原来的Cookies数组,现在讲原有删除,在末尾加入现有的书籍,相当于将原来位置移动到末尾。

 1     // 1. 确定被删除的Cookie是哪个---前提是ATUG_Book开头的Cookie,m每添加一件商品会在cookies数组中增加一条Cookie
 2                 // 所有getCookies是一个数组
 3                  String book=request.getParameter("book");   
 4                 
 5                  List<Cookie> list=new ArrayList<Cookie>();
 6                  
 7                  Cookie tempCook=null;
 8                  Cookie [] cookies=request.getCookies();
 9                 if(cookies!=null && cookies.length>0)
10                 {
11                     for(Cookie bcookie:cookies)
12                     {
13                         String bookName=bcookie.getName();
14                         if(bookName.startsWith("ATUG_Book"))
15                         {
16                             list.add(bcookie);
17                             
18                             if(bcookie.getValue().equals(book))
19                             {//判断book是否已经存入原来的Cookie中
20                                 tempCook=bcookie;
21                             }
22                         }
23                     }
24                 }
25                 
26                 // 删除第一种情形,删除数量大于5并且之前记录中没有出现的
27                 if(list.size()>=5 && tempCook==null)
28                 {
29                     tempCook=list.get(0);
30                 }
31                 
32                 // 删除第二种情形:并且之前出现过相当于更新
33                 if(tempCook!=null )
34                 {
35                     tempCook.setMaxAge(0);
36                     response.addCookie(tempCook);
37                 }
38                 // 2.将从books传入的的book更新完了之后作为一个新的cookie 返回
39             
40                 Cookie cookie=new Cookie("ATUG_Book"+book,book);
41                 response.addCookie(cookie);

   


CookiePath:只能作用于当前目录和其子目录,不能作用于其上一级目录

向作用上一级目录使用setPath(request.getContextPath()--等于当前项目目录(/TomCat))

       / 表示当前站点根目录,

原文地址:https://www.cnblogs.com/woainifanfan/p/6683938.html