国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

JavaWeb開發使用Cookie創建-獲取-持久化、自動登錄、購物記錄、作用路徑

2019-11-26 13:55:36
字體:
來源:轉載
供稿:網友

1、cookie是啥?隨手百度了網友的說說

簡單的說,Cookie就是服務器暫存放在你計算機上的一筆資料,好讓服務器用來辨認你的計算機。當你在瀏覽網站的時候,Web服務器會先送一小小資料放在你的計算機上,當下次你再光臨同一個網站,Web服務器會先看看有沒有它上次留下的Cookie資料,有的話,就會依據Cookie里的內容來判斷使用者,送出特定的網頁內容給你。

2、cookie在哪里?

這里寫圖片描述這里寫圖片描述

3、cookie可以刪除嗎?

這里寫圖片描述這里寫圖片描述

4、cookie實現原理

第一次請求瀏覽器,在瀏覽器的cookie存儲區,沒有cookie,

第一次訪問不帶Cookie,瀏覽器通過Http請求消息中增加Cookie請求頭將Cookie回傳給web服務器,瀏覽器會把Cookie的信息片斷以”名/值”對(name-value pairs)的形式儲存保存在本地,下次訪問,web服務器通過http響應消息中增加Set-Cookie響應頭,將Cookie信息發送給瀏覽器

我們通過實際來看下cookie吧

創建一個cookie.jsp,為了便于觀察,設置session=”false”

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" session="false"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><%//創建一個cookieCookie cookie = new Cookie("name","wyf");response.addCookie(cookie);%></body></html>

我們第一次訪問cookie.jsp文件,在IE輸入

http://localhost:8080/day01/cookie.jsp

請求標頭中,可以看到首次訪問是不攜帶cookie的

這里寫圖片描述 

在響應標頭中,通過Set-Cookie傳回,并且保存在瀏覽器本地cookie存儲區

這里寫圖片描述

我們第二次訪問cook.jsp文件,看看有沒有變化

請求標頭中,可以看到再次訪問,是從瀏覽器本地cookie存儲區,攜帶cookie的請求的

這里寫圖片描述 

如下是響應標頭:

這里寫圖片描述

我們用一個交互圖,來了解下cookie機制:

我們來看下cookie的創建、獲取

這里寫圖片描述

cookie.jsp中代碼意思是:如果請求中,沒有cookie,就創建并返回,請求中帶cookie的話,就輸出cookie鍵值對(name-value)

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" session="false"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><%Cookie[] cookies = request.getCookies();if(cookies !=null && cookies.length>0){for(Cookie cookie : cookies){out.print(cookie.getName()+":"+cookie.getValue());}}else{out.print("沒有cookie,正在創建,并且返回");Cookie cookie = new Cookie("name","wyf");response.addCookie(cookie);}%></body></html>

第一次訪問

這里寫圖片描述 

第二次訪問

這里寫圖片描述

以上操作是我們需要重新關閉瀏覽器,在進行調試為什么呢?
因為默認情況下,cookie是一個會話級別的cookie,存儲在瀏覽器的內核中,用戶退出瀏覽器后被刪除,若希望瀏覽器將該cookie存儲在磁盤上,則需要使用maxAge,單位為秒

我們來看下持久化cookie

<%Cookie[] cookies = request.getCookies();if(cookies !=null && cookies.length>0){for(Cookie cookie : cookies){out.print(cookie.getName()+":"+cookie.getValue());}}else{out.print("沒有cookie,正在創建,并且返回");Cookie cookie = new Cookie("name","wyf");cookie.setMaxAge(30);response.addCookie(cookie);}%>

cookie.setMaxAge(30);設置為30秒,這里就不截圖了,說名下即可,第一次訪問沒有cookie創建cookie,第二次訪問輸出cookie鍵值對,關閉瀏覽器,在30秒內訪問,依然提示cookie鍵值對,而不是之前的提示沒有cookie創建cookie

自動登錄

這里寫圖片描述

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><form action="success.jsp" method="post">name:<input type="text" name="name"/><input type="submit" value="sumit"/></form></body></html>

success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" session="false"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><%//若可以獲取到參數name,則打印登錄信息,將信息存儲到cookie中,并設置cookei的時間String name = request.getParameter("name");if (name != null && !name.trim().equals("")) {Cookie cookie = new Cookie("nameCookie", name);cookie.setMaxAge(60);response.addCookie(cookie);} else {//如果沒有參數,可以用cookie登錄,從cookie中讀取用戶信息,如果存在則打印歡迎信息Cookie[] cookies = request.getCookies();if (cookies != null && cookies.length > 0) {for (Cookie cookie : cookies) {String cookieName = cookie.getName();if ("nameCookie".equals(cookieName)) {String val = cookie.getValue();name = val;}}}}if (name != null && !name.trim().equals("")) {out.print("hello" + name);} else {//若沒有請求參數,也沒有cookie,則重定向到login.jspresponse.sendRedirect("login.jsp");}%></body></html>

第一次訪問http://localhost:8080/day01/login.jsp輸入name參數值,提交,在success.jsp中,首先獲取提交過來的參數name值,如果不為null,那么就直接設置一個cookie,保存參數name值,然后頁面輸出name參數值,第二次訪問直接輸入http://localhost:8080/day01/success.jsp,
由于這次么有攜帶參數name值,我們只需要從cookie的value值中獲取值,然后顯示輸出即可

顯示最近的購物記錄

這里寫圖片描述 

books.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><h4>Books Page</h4><a href="book.jsp?book=JavaWeb">JavaWeb</a><a href="book.jsp?book=Java">Java</a><a href="book.jsp?book=Oracle">Oracle</a><a href="book.jsp?book=Ajax">Ajax</a><a href="book.jsp?book=JavaScript">JavaScript</a><a href="book.jsp?book=Android">Android</a><a href="book.jsp?book=Jbpm">Jbpm</a><br><br><%//獲取所有的CookieCookie[] cookies = request.getCookies();//從篩選出的Book的Cookie,如果cookieName為ATGUIGU_BOOK_ 開頭的即符合條件if(cookies!=null&&cookies.length>0){for(Cookie c:cookies){String cookieName = c.getName();if(cookieName.startsWith("Safly")){//顯示cookieValueout.println(c.getValue());out.print("<br>");}}}%></body></html>

book.jsp

<%@page import="java.util.ArrayList"%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>Book:<%= request.getParameter("book") %><br><br><a href="books.jsp">return</a><%String book = request.getParameter("book");//確定要被刪除的CookieCookie[] cookies = request.getCookies();//保存所有Safly 開頭的CookieArrayList<Cookie> bookCookies = new ArrayList<Cookie>();//用來保存和books.jsp 傳入的book匹配的那個CookieCookie tempCookie = null;if(cookies!=null&&cookies.length>0){for(Cookie c:cookies){String cookieName = c.getName();if(cookieName.startsWith("Safly")){bookCookies.add(c);//選購5個之后,在選5個中的一個if(c.getValue().equals(book)){out.print("c.getValue().equals(book)");tempCookie = c;}}}}//選購5個選除這5本以外的一本if(bookCookies.size() >= 5&&tempCookie == null){tempCookie = bookCookies.get(0); //out.print("tempCookie == null");}//若在其中則刪除bookCookie本身,將列表的重復cookie刪掉,并且將其回傳if(tempCookie != null){tempCookie.setMaxAge(0);response.addCookie(tempCookie);}//把從books.jsp傳入的book作為一個Cook返回Cookie cook = new Cookie("Safly"+book,book);response.addCookie(cook);%></body></html>

說一下邏輯關系:

在Books.jsp中以下是書籍的列表,

JavaWeb
Java
Oracle
Ajax
JavaScript
Android
Jbpm

我隨便選擇一個鏈接(比如JavaWeb),去跳轉到book.jsp,第一次訪問是沒有帶Cookie的,所以會調用book.jsp如下的方法,創建了一個cookie,在book.jsp頁面中,點擊return返回到books.jsp就取出cooks.jsp帶過來的cookieValue,然后展現選中的書籍列表即可

Cookie cook = new Cookie("Safly"+book,book);response.addCookie(cook);

此刻已經回到books.jsp中,已經選擇了JavaWeb一本書,我們在選擇一本(假如Java),然后跳轉到books.jsp,此刻我們會帶著1個cookie(就是第一次選中JavaWeb訪問books.jsp時候,給我傳過來的),這個cookie的鍵值就是SaflyJavaWeb

主站蜘蛛池模板: 张掖市| 准格尔旗| 桓台县| 新源县| 米脂县| 昔阳县| 罗城| 洛浦县| 广东省| 揭东县| 鹰潭市| 巴南区| 如皋市| 宁河县| 平度市| 黄平县| 资溪县| 惠来县| 浦江县| 高要市| 灌云县| 寿阳县| 榆林市| 泊头市| 溧水县| 岳普湖县| 马鞍山市| 瑞安市| 枣强县| 彭山县| 鹤峰县| 清徐县| 茶陵县| 沾益县| 当涂县| 刚察县| 乌兰县| 潜江市| 杭锦旗| 东辽县| 延吉市|