Cookie使用說明,cookie講解

 2023-11-19 阅读 19 评论 0

摘要:1:cookie的核心機制: 客戶端訪問服務器是會從cookie存儲區中查找是否有與該服務器對應的cookie信息,第一次訪問是是不存在的,此時服務器接到請求信息后會生成該客戶端與自己對應的唯一cookie,并放在響應頭中響應給客戶端,客戶端收到

1:cookie的核心機制:

客戶端訪問服務器是會從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>

?

轉載于:https://www.cnblogs.com/lubolin/p/7522082.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/181482.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息