亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

jsp online reference manual / JSP Cookie 處理

JSP Cookie 處理

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

通常有三個(gè)步驟來識(shí)別回頭客:

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

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

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

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

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

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

        Cookie 剖析

Cookie通常在HTTP信息頭中設(shè)置(雖然JavaScript能夠直接在瀏覽器中設(shè)置cookie)。在JSP中,設(shè)置一個(gè)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=php; expires=Friday, 04-Feb-07 22:03:38 GMT; 
                 path=/; domain=php.cn
Connection: close
Content-Type: text/html

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

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

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對(duì)象中的getCookies()方法來訪問這些cookie,這個(gè)方法會(huì)返回一個(gè)Cookie對(duì)象的數(shù)組。


        Servlet Cookie 方法

下表列出了Cookie對(duì)象中常用的方法:

序號(hào)方法 & 描述
                    1public void setDomain(String pattern)


設(shè)置cookie的域名,比如w3cschool.cc
                    2public String getDomain()


獲取cookie的域名,比如w3cschool.cc
                    3public void setMaxAge(int expiry)


設(shè)置cookie有效期,以秒為單位,默認(rèn)有效期為當(dāng)前session的存活時(shí)間
                    4public int getMaxAge()


獲取cookie有效期,以秒為單位,默認(rèn)為-1 ,表明cookie會(huì)活到瀏覽器關(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)給用戶時(shí),注釋將會(huì)變得非常有用
                    12public String getComment()


返回描述cookie目的的注釋,若沒有則返回null

使用JSP設(shè)置Cookie

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

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

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

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

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

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

cookie.setMaxAge(60*60*24);

(3) 將cookie發(fā)送至HTTP響應(yīng)頭中:調(diào)用response.addCookie()函數(shù)來向HTTP響應(yīng)頭中添加cookie。

response.addCookie(cookie);

實(shí)例演示

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過期時(shí)間為24小時(shí)。
   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>

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

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文網(wǎng)(php.cn)</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 同一個(gè)目錄)。

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

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


使用 JSP 讀取 Cookie

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

<h3實(shí)例演示< h3="">

讓我們來讀取上個(gè)例子中的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ù),是一個(gè)數(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é)果為:

C6A7341F-029A-4244-8B38-BE010E391091.jpg


        使用JSP刪除Cookie

刪除cookie非常簡(jiǎn)單。如果您想要?jiǎng)h除一個(gè)cookie,按照下面給的步驟來做就行了:

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

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

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


實(shí)例演示

下面的程序刪除一個(gè)名為"name"的cookie,當(dāng)您第二次運(yùn)行cookie.jsp時(shí),name 將會(huì)為 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,是一個(gè)數(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é)果為:

C6A7341F-029A-4244-8B38-BE010E391091.jpg

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

7BF1C669-F7A4-4245-B7B0-B79BBB272604.jpg

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

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