2019-04-12 cookie基础

cookie

     作为web服务器,必须能够采用一种机制来唯一标识一个用户,同时记录该用户的状态

会话cookie和持久化cookie

cookie.setMaxAge(30) 设置cookie存在的时间

如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览器会话期的cookie称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。

若果过了设置的时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。

存储在硬盘上的cookie可以在不不同的浏览器进程间共享,比如两个IE窗口,而对于保存在内存的cookie,不同的浏览器有不同的处理方式。

利用cookie 自动登陆

login.jsp

1   <form action="index.jsp" method="post">
2           name:<input type="text" name="name"/>
3           <input type="submit" value="Submit">
4      </form>

index.jsp

 1     <%
 2         //若可以获取到请求的参数name,则打印出欢迎的信息,把登陆信息存储到Cookie中,并设置Cookie的最大时效30s
 3         String name = request.getParameter("name");
 4         if (name != null && !name.trim().equals("")) {
 5 
 6             Cookie cookie = new Cookie("name", name);
 7             cookie.setMaxAge(30);
 8             response.addCookie(cookie);
 9         } else {
10             //从cookie中读取用户信息,若存在则打印欢迎信息
11             Cookie[] cookies = request.getCookies();
12             if (cookies != null && cookies.length > 0) {
13                 for (Cookie cookie : cookies) {
14                     String cookieName = cookie.getName();
15                     if ("name".equals(cookieName)) {
16                         String val = cookie.getValue();
17                         name = val;
18                     }
19                 }
20 
21             }
22 
23         }
24 
25         if (name != null && !name.trim().equals("")) {
26             out.print("hello: " + name);
27         } else {
28             //若既没有请求参数,也没有Cookie,则重定向到login.jsp
29             response.sendRedirect("login.jsp");
30         }
31     %>

利用cookie显示最近浏览的商品

books.jsp

 1     <!-- 
 2         利用 Cookie 实现 "您浏览过的图书有: x, y, z", 只显示最近浏览的 3 本图书的信息
 3         且支持 Cookie 的持久化. 其余的 Cookie 被删除: 调用其 setMaxAge() 方法, 传入
 4         0 即可。
 5     -->
 6     
 7     
 8     <h4>Books Page</h4>
 9     
10     <a href="book.jsp?book=JavaWeb">Java Web</a><br><br>
11     <a href="book.jsp?book=Java">Java</a><br><br>
12     <a href="book.jsp?book=Oracle">Oracle</a><br><br>
13     <a href="book.jsp?book=Ajax">Ajax</a><br><br>
14     <a href="book.jsp?book=JavaScript">JavaScript</a><br><br>
15     <a href="book.jsp?book=Android">Android</a><br><br>
16     <a href="book.jsp?book=Jbpm">Jbpm</a><br><br>
17     <a href="book.jsp?book=Struts">Struts</a><br><br>
18     <a href="book.jsp?book=Hibernate">Hibernate</a><br><br>
19     <a href="book.jsp?book=Spring">Spring</a><br><br>
20     
21     <br><br>
22     
23     <% 
24         StringBuilder books = new StringBuilder("");
25     
26         Cookie [] cookies = request.getCookies();
27     
28         if(cookies != null && cookies.length > 0){
29             
30             
31             for(Cookie cookie: cookies){
32                 String cookieName = cookie.getName();
33                 String cookieVal = cookie.getValue();
34                 
35                 if(cookieName.startsWith("book_")){ 
36                     books.append(cookieVal + "&nbsp;&nbsp;");
37                 }
38             }
39             
40         }
41         
42         if(!books.toString().equals("")){
43             out.print("您浏览过的商品有: " + books.toString()); 
44         }
45     
46     %>

book.jsp

 1 <h4>Book Detail Page</h4>
 2     
 3     Book: <%= request.getParameter("book") %>
 4     
 5     <br><br>
 6     
 7     <a href="books.jsp">Return</a>
 8     
 9     <% 
10         String book = request.getParameter("book");
11         Cookie tempCookie = null;
12         
13         //只显示最近浏览过的 3 件商品. 
14         
15         //1. 获取所有满足条件的 Cookie
16         List<Cookie> books = new ArrayList<Cookie>();
17         
18         Cookie [] cookies = request.getCookies();
19     
20         if(cookies != null && cookies.length > 0){
21             
22             
23             for(Cookie cookie: cookies){
24                 String cookieName = cookie.getName();
25                 
26                 if(cookieName.startsWith("book_")){ 
27                     books.add(cookie);
28                     
29                     String cookieVal = cookie.getValue();
30                     if(cookieVal.equals(book)){ 
31                         tempCookie = cookie;
32                     }
33                 }
34             }
35             
36         }
37         
38         if(books.size() == 5){
39             if(tempCookie == null){
40                 tempCookie = books.get(0);
41             }
42             
43             tempCookie.setMaxAge(0);
44             response.addCookie(tempCookie);
45         }
46         
47         //2. 在数组 length == 3 的情况下, 把最早的那个(即数组的第 1 个元素-下标是 0 的那个元素)删除 
48         Cookie cookie = new Cookie("book_" + book, book);
49         response.addCookie(cookie);
50     %>

设置cookie的作用路径

cookie的作用范围:可以作用当前目录和当前目录的子目录。但不能作用于当前目录的上一级目录。

设置cookie的作用范围

cookie.setPath(request.getContextPath());

request.getContextPath() 这个是动态的代表web项目地址 如/day_3

可以通过setPath方法来设置cookie的作用域,其中/代表站点的根目录。

原文地址:https://www.cnblogs.com/Codinginging/p/10699217.html