當前位置:
首頁 > 知識 > JSP Cookie 處理

JSP Cookie 處理

Cookie是存儲在客戶機的文本文件,它們保存了大量軌跡信息。在servlet技術基礎上,JSP顯然能夠提供對HTTP cookie的支持。

通常有三個步驟來識別回頭客:

  • 伺服器腳本發送一系列cookie至瀏覽器。比如名字,年齡,ID號碼等等。

  • 瀏覽器在本地機中存儲這些信息,以備不時之需。

  • 當下一次瀏覽器發送任何請求至伺服器時,它會同時將這些cookie信息發送給伺服器,然後伺服器使用這些信息來識別用戶或者幹些其它事情。

如何去設置或重設cookie的方法,還有如何訪問它們及如何刪除它們。


JSP Cookie 處理需要對中文進行編碼與解碼,方法如下:

String str = java.net.URLEncoder.encode("中文","UTF-8"); //編碼String str = java.net.URLDecoder.decode("編碼後的字元串","UTF-8"); // 解碼


Cookie 剖析

Cookie通常在HTTP信息頭中設置(雖然JavaScript能夠直接在瀏覽器中設置cookie)。在JSP中,設置一個cookie需要發送如下的信息頭給伺服器:

HTTP/1.1 200 OKDate: Fri, 04 Feb 2015 21:03:38 GMTServer: Apache/1.3.9 (UNIX) PHP/4.0b3Set-Cookie: name=runoob; expires=Friday, 04-Feb-07 22:03:38 GMT;
path=/; domain=runoob.comConnection: closeContent-Type: text/html

正如您所見,Set-Cookie信息頭包含一個鍵值對,一個GMT(格林尼治標準)時間,一個路徑,一個域名。鍵值對會被編碼為URL。有效期域是個指令,告訴瀏覽器在什麼時候之後就可以清除這個cookie。

如果瀏覽器被配置成可存儲cookie,那麼它將會保存這些信息直到過期。如果用戶訪問的任何頁面匹配了cookie中的路徑和域名,那麼瀏覽器將會重新將這個cookie發回給伺服器。瀏覽器端的信息頭長得就像下面這樣:

GET / HTTP/1.0Connection: Keep-AliveUser-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)Host: zink.demon.co.uk:1126Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz

JSP腳本通過request對象中的getCookies()方法來訪問這些cookie,這個方法會返回一個Cookie對象的數組。



Servlet Cookie 方法

下表列出了Cookie對象中常用的方法:


序號 方法 & 描述
1 public void setDomain(String pattern)設置cookie的域名,比如 runoob.com
2 public String getDomain()獲取cookie的域名,比如 runoob.com
3 public void setMaxAge(int expiry)設置cookie有效期,以秒為單位,默認有效期為當前session的存活時間
4 public int getMaxAge()獲取cookie有效期,以秒為單位,默認為-1 ,表明cookie會活到瀏覽器關閉為止
5 public String getName()返回 cookie的名稱,名稱創建後將不能被修改
6 public void setValue(String newValue)設置 cookie的值
7 public String getValue()獲取cookie的值
8 public void setPath(String uri)設置cookie 的路徑,默認為當前頁面目錄下的所有URL,還有此目錄下的所有子目錄
9 public String getPath()獲取cookie 的路徑
10 public void setSecure(boolean flag)指明cookie是否要加密傳輸
11 public void setComment(String purpose)設置注釋描述 cookie的目的。當瀏覽器將cookie展現給用戶時,注釋將會變得非常有用
12 public String getComment()返回描述cookie目的的注釋,若沒有則返回null


使用JSP設置Cookie

使用JSP設置cookie包含三個步驟:

(1)創建一個Cookie對象:調用Cookie的構造函數,使用一個cookie名稱和值做參數,它們都是字元串。

Cookie cookie = new Cookie("key","value");

請務必牢記,名稱和值中都不能包含空格或者如下的字元:

[ ] ( ) = , " / ? @ : ;

(2) 設置有效期:調用setMaxAge()函數表明cookie在多長時間(以秒為單位)內有效。下面的操作將有效期設為了24小時。

cookie.setMaxAge(60*60*24);

(3) 將cookie發送至HTTP響應頭中:調用response.addCookie()函數來向HTTP響應頭中添加cookie。

response.addCookie(cookie);


實例演示

main.jsp 文件代碼如下所示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%><%@ page import="java.net.*" %><%
// 編碼,解決中文亂碼
String str = URLEncoder.encode(request.getParameter("name"),"utf-8");
// 設置 name 和 url cookie
Cookie name = new Cookie("name", str);
Cookie url = new Cookie("url", request.getParameter("url"));
// 設置cookie過期時間為24小時。
name.setMaxAge(60*60*24);
url.setMaxAge(60*60*24);
// 在響應頭部添加cookie
response.addCookie( name );
response.addCookie( url );%><html><head><title>設置 Cookie</title></head><body><h1>設置 Cookie</h1><ul><li><p><b>網站名:</b>
<%= request.getParameter("name")%></p></li><li><p><b>網址:</b>
<%= request.getParameter("url")%></p></li></ul></body></html>

以下是一個簡單的 HTML 表單通過GET方法將客戶端數據提交到 main.jsp 文件中,並設置 cookie:

<!DOCTYPE html><html><head><meta charset="utf-8"><title>我愛學習(run.com)</title></head><body><form action="main.jsp" method=GET>站點名: <input type="text" name="name"><br />網址: <input type="text" name="url" /><input type="submit" value="提交" /></form></body></html>

將以上HTML代碼保存到test.htm文件中。

將該文件放置於當前jsp項目的 WebContent 目錄下(與 main.jsp 同一個目錄)。

通過訪問 http://localhost:8080/testjsp/test.html 提交表單數據到 main.jsp 文件,試著輸入 "站點名" 和 "網址",然後點擊提交按鈕,它將會在您的屏幕中顯示 "站點名" 和 "網址",並且設置 "站點名" 和 "網址" 的兩個 cookie。



使用 JSP 讀取 Cookie

想要讀取cookie,您就需要調用request.getCookies()方法來獲得一個javax.servlet.http.Cookie對象的數組,然後遍歷這個數組,使用getName()方法和getValue()方法來獲取每一個cookie的名稱和值。

<h3實例演示< h3="" data-filtered="filtered" stylex="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "WenQuanYi Micro Hei", Arial, sans-serif; font-size: 12px; white-space: normal;">

讓我們來讀取上個例子中的cookie, 以下為 cookie.jsp 文件代碼:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%><%@ page import="java.net.*" %><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>獲取 Cookie</title></head><body><%
Cookie cookie = null;
Cookie[] cookies = null;
// 獲取cookies的數據,是一個數組
cookies = request.getCookies();
if( cookies != null ){
out.println("<h2> 查找 Cookie 名與值</h2>");
for (int i = 0; i < cookies.length; i++){
cookie = cookies[i];
out.print("參數名 : " + cookie.getName());
out.print("<br>");
out.print("參數值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
out.print("------------------------------------<br>");
}
}else{
out.println("<h2>沒有發現 Cookie</h2>");
}%></body></html>

JSP Cookie 處理



使用JSP刪除Cookie

刪除cookie非常簡單。如果您想要刪除一個cookie,按照下面給的步驟來做就行了:

  • 獲取一個已經存在的cookie然後存儲在Cookie對象中。

  • 將cookie的有效期設置為0。

  • 將這個cookie重新添加進響應頭中。


實例演示

下面的程序刪除一個名為"name"的cookie,當您第二次運行cookie.jsp時,name 將會為 null。

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%><%@ page import="java.net.*" %><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>獲取 Cookie</title></head><body><%
Cookie cookie = null;
Cookie[] cookies = null;
// 獲取當前域名下的cookies,是一個數組
cookies = request.getCookies();
if( cookies != null ){ out.println("<h2> 查找 Cookie 名與值</h2>");
for (int i = 0; i < cookies.length; i++){
cookie = cookies[i];
if((cookie.getName( )).compareTo("name") == 0 ){
cookie.setMaxAge(0);
response.addCookie(cookie);
out.print("刪除 Cookie: " +
cookie.getName( ) + "<br/>");
}
out.print("參數名 : " + cookie.getName());
out.print("<br>");
out.print("參數值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
out.print("------------------------------------<br>");
}
}else{ out.println("<h2>沒有發現 Cookie</h2>");
}%></body></html>

再次訪問 http://localhost:8080/testjsp/cookie.jsp,將會得到如下結果:

JSP Cookie 處理

可以看到名為"name" 的 cookie 已經不見了。

您也可以手動在瀏覽器中刪除 cookie。IE 瀏覽器通過點擊Tools菜單項,然後選擇Internet Options,點擊 Delete Cookies,就能刪除所有 cookie 。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

Docker 容器連接
Shell 輸入/輸出重定向

TAG:程序員小新人學習 |