一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - JavaWeb開發使用Cookie創建-獲取-持久化、自動登錄、購物記錄、作用路徑

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

2020-06-07 13:38Saflyer JAVA教程

這篇文章主要介紹了JavaWeb開發使用Cookie創建-獲取-持久化、自動登錄、購物記錄、作用路徑的相關知識,非常不錯,對cookie持久化知識感興趣的朋友一起學習吧

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

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

2、cookie在哪里?

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

3、cookie可以刪除嗎?

JavaWeb開發使用Cookie創建-獲取-持久化、自動登錄、購物記錄、作用路徑JavaWeb開發使用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>
<%
//創建一個cookie
Cookie cookie = new Cookie("name","wyf");
response.addCookie(cookie);
%>
</body>
</html>

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

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

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

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

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

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

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

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

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

如下是響應標頭:

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

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

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

JavaWeb開發使用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>

第一次訪問

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

第二次訪問

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

以上操作是我們需要重新關閉瀏覽器,在進行調試為什么呢?
因為默認情況下,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

自動登錄

JavaWeb開發使用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.jsp
response.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值中獲取值,然后顯示輸出即可

顯示最近的購物記錄

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

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>
<%
//獲取所有的Cookie
Cookie[] 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")){
//顯示cookieValue
out.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");
//確定要被刪除的Cookie
Cookie[] cookies = request.getCookies();
//保存所有Safly 開頭的Cookie
ArrayList<Cookie> bookCookies = new ArrayList<Cookie>();
//用來保存和books.jsp 傳入的book匹配的那個Cookie
Cookie 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–JavaWeb,但是呢?選中第二本書Java是沒有帶cookie的(沒有SaflyJava–Java)
然后就進入到cooks.jsp中


if(cookieName.startsWith("Safly")){
bookCookies.add(c);}

所以也就將SaflyJavaWeb–JavaWeb放入到一bookCookies中(存放選中的書籍列表)然后呢,那個SaflyJava–Java就會創建,在點擊renturn時候,反給cookies.jsp

。。。。第3、4、5次選擇書時,是一樣的過程
如果等books.jsp中選擇了5本書時候,在選擇這5本書中的某一本時候,怎么處理呢?
c.getValue().equals(book)來獲取選中的那本書,我們需要將此cookie刪除然后,從新添加進來然后回傳給cookies.jsp代碼如下:


tempCookie.setMaxAge(0);
response.addCookie(tempCookie);

如果等books.jsp中選擇了5本書時候,在選擇非此5本書的第6本書,怎么處理呢?
我們就tempCookie = bookCookies.get(0); 取出來那5本書的第一本,然后tempCookie.setMaxAge(0);刪除調第一本的cookie,然后將第6本書,創建cookie回傳給cookies.jsp即可

以下是部分截圖:

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

cookie的作用路徑

cookie2.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>
<%
String cookieValue = null;
Cookie [] cookies = request.getCookies();
if(cookies!=null&& cookies.length>0){
for(Cookie cookie:cookies){
if("cookiePath".equals(cookie.getName())){
cookieValue = cookie.getValue();
}
}
}
if(cookieValue != null){
out.print(cookieValue);
}else{
out.print("沒有指定的cookie");
}
%>
</body>
</html>

writerCookie.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>
<%
//可以作用當前目錄,和當前目錄的子目錄,但不能作用于當前目錄的上一級目錄
//可以通過setPath設置cookie的作用范圍,/代表站點的根目錄
Cookie cookie = new Cookie("cookiePath","CookiePathValue");
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
%>
<a href="../cookie2.jsp">to cookie2.jsp</a>
</body>
</html>

to cookie2.jsp就是訪問writerCookie.jsp上級目錄的cookie2.jsp

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

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

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

以上所述是小編給大家介紹的JavaWeb開發使用Cookie創建-獲取-持久化、自動登錄、購物記錄、作用路徑,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成年男女免费视频观看性 | 国色天香高清版 | 3黑人巨大vs北岛玲 3d肉浦团在线观看 3d动漫免费 | 男人躁女人p | 色老板美国在线观看 | xxx老妇人60| 公园暴露娇妻小说 | 青草国内精品视频在线观看 | 亚洲视频精选 | 四虎视屏| 色噜噜国产精品视频一区二区 | 范冰冰a级一级特级毛片 | 亚洲国产综合网 | 色四虎| 四虎免费看 | 亚洲 欧美 中文字幕 在线 | 182免费在线观看 | 免费看男女做好爽好硬视频 | 被肉日常np高h | 99久久久久久久 | 亚裔aⅴ艳星katsuni | 日本一道高清不卡免费 | 国产区综合另类亚洲欧美 | 妇乱子伦激情 | 国产亚洲精品高清在线 | 9久久9久久精品 | 草逼动漫 | kk4444了欧美 | 国产九九 | 青青操在线 | 我们中文在线观看免费完整版 | 精品国产区一区二区三区在线观看 | 亚洲成A人片在线观看中文L | 免费永久观看美女视频网站网址 | 久久这里只有精品无码3D | 国产成人精品免费视频软件 | 99r在线播放 | 美女张开双腿让男人捅 | 故意短裙公车被强好爽在线播放 | 日韩欧美在线视频一区二区 | 欧美一级在线全免费 |