JSP Cookie 處理

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

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

  •             服務(wù)器腳本發(fā)送一系列 cookie 至瀏覽器。比如名字,年齡,ID 號碼等等。

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

  •             當(dāng)下一次瀏覽器發(fā)送任何請求至服務(wù)器時,它會同時將這些 cookie 信息發(fā)送給服務(wù)器,然后服務(wù)器使用這些信息來識別用戶或者干些其它事情。

本章節(jié)將會傳授您如何去設(shè)置或重設(shè) cookie 的方法,還有如何訪問它們及如何刪除它們。

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

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

Cookie 剖析

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

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2015 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=nhooo; expires=Friday, 04-Feb-17 22:03:38 GMT; 
                 path=/; domain=(cainiaoplus.com)
Connection: close
Content-Type: text/html

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

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

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

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

    Servlet Cookie 方法

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

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

使用 JSP 設(shè)置 cookie

使用 JSP 設(shè)置 cookie 包含三個步驟:

(1)創(chuàng)建一個 cookie 對象: 調(diào)用 cookie 的構(gòu)造函數(shù),使用一個 cookie 名稱和值做參數(shù),它們都是字符串。

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

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

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

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

cookie.setMaxAge(60*60*24);

(3) 將 cookie 發(fā)送至 HTTP 響應(yīng)頭中:調(diào)用 response.addCookie() 函數(shù)來向 HTTP 響應(yīng)頭中添加 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");  
   // 設(shè)置 name 和 url cookie 
   Cookie name = new Cookie("name",
           str);
   Cookie url = new Cookie("url",
              request.getParameter("url"));
   // 設(shè)置cookie過期時間為24小時。
   name.setMaxAge(60*60*24); 
   url.setMaxAge(60*60*24); 
   // 在響應(yīng)頭部添加cookie
   response.addCookie( name );
   response.addCookie( url );
%>
<html>
<head>
<title>設(shè)置 Cookie</title>
</head>
<body>
<h1>設(shè)置 Cookie</h1>
<ul>
<li><p><b>網(wǎng)站名:</b>
   <%= request.getParameter("name")%>
</p></li>
<li><p><b>網(wǎng)址:</b>
   <%= request.getParameter("url")%>
</p></li>
</ul>
</body>
</html>

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

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(cainiaoplus.com)</title>
</head>
<body>
<form action="main.jsp" method=GET>
站點(diǎn)名: <input type="text" name="name">
<br />
網(wǎng)址: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>
</body>
</html>

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

將該文件放置于當(dāng)前 jsp 項(xiàng)目的 WebContent 目錄下(與 main.jsp 同一個目錄)。

通過訪問 http://localhost:8080/testjsp/test.html 提交表單數(shù)據(jù)到 main.jsp 文件,如下所示:

圖片.png

圖片.png

試著輸入 "站點(diǎn)名" 和 "網(wǎng)址",然后點(diǎn)擊提交按鈕,它將會在您的屏幕中顯示 "站點(diǎn)名" 和 "網(wǎng)址",并且設(shè)置 "站點(diǎn)名" 和 "網(wǎng)址" 的兩個 cookie。

使用 JSP 讀取 Cookie

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

示例演示

讓我們來讀取上個實(shí)例中的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 的數(shù)據(jù),是一個數(shù)組
   cookies = request.getCookies();
   if( cookies != null ){
      out.println("<h2> 查找 Cookie 名與值</h2>");
      for (int i = 0; i < cookies.length; i++){
         cookie = cookies[i];
        
         out.print("參數(shù)名 : " + cookie.getName());
         out.print("<br>");
         out.print("參數(shù)值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
         out.print("------------------------------------<br>");
      }
  }else{
      out.println("<h2>沒有發(fā)現(xiàn) Cookie</h2>");
  }
%>
</body>
</html>

瀏覽器訪問后,輸出結(jié)果為:

圖片.png

    使用 JSP 刪除 cookie

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

  •             獲取一個已經(jīng)存在的 cookie 然后存儲在 Cookie 對象中。

  •             將 cookie 的有效期設(shè)置為 0。

  •             將這個 cookie 重新添加進(jìn)響應(yīng)頭中。

示例演示

下面的程序刪除一個名為 "name" 的 cookie,當(dāng)您第二次運(yùn)行 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;
   // 獲取當(dāng)前域名下的cookies,是一個數(shù)組
   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("參數(shù)名 : " + cookie.getName());
         out.print("<br>");
         out.print("參數(shù)值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
         out.print("------------------------------------<br>");
      }
  }else{
      out.println("<h2>沒有發(fā)現(xiàn) Cookie</h2>");
  }
%>
</body>
</html>

通過瀏覽器訪問,輸出結(jié)果為:

圖片.png

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

圖片.png

可以看到名為 "name" 的 cookie 已經(jīng)不見了。

您也可以手動在瀏覽器中刪除 cookie。IE 瀏覽器通過點(diǎn)擊 Tools 菜單項(xiàng),然后選擇 Internet Options,點(diǎn)擊 Delete Cookies,就能刪除所有 cookie 。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清