程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JavaWeb開辟應用Cookie創立-獲得-耐久化、主動登錄、購物記載、感化途徑

JavaWeb開辟應用Cookie創立-獲得-耐久化、主動登錄、購物記載、感化途徑

編輯:關於JAVA

JavaWeb開辟應用Cookie創立-獲得-耐久化、主動登錄、購物記載、感化途徑。本站提示廣大學習愛好者:(JavaWeb開辟應用Cookie創立-獲得-耐久化、主動登錄、購物記載、感化途徑)文章只能為提供參考,不一定能成為您想要的結果。以下是JavaWeb開辟應用Cookie創立-獲得-耐久化、主動登錄、購物記載、感化途徑正文


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>
<%
//創立一個cookie
Cookie 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.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值中獲得值,然後顯示輸入便可

顯示比來的購物記載

 

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便可

以下是部門截圖:

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創立-獲得-耐久化、主動登錄、購物記載、感化途徑,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved