JSP cookie基礎
阿新 • • 發佈:2019-01-28
HTTP是無狀態協議,這意味著每次客戶端檢索網頁時,都要單獨開啟一個伺服器連線,因此伺服器不會記錄下先前客戶端請求的任何資訊。
JSP Cookie處理
Cookie是儲存在客戶機的文字檔案,它們儲存了大量軌跡資訊。
利用cookie技術識別使用者。通常有三個步驟:
- 伺服器指令碼傳送一系列cookie至瀏覽器。比如名字,年齡,ID號碼等等。
- 瀏覽器在本地機中儲存這些資訊,以備不時之需。
- 當下一次瀏覽器傳送任何請求至伺服器時,它會同時將這些cookie資訊傳送給伺服器,然後伺服器使用這些資訊來識別使用者或者幹些其它事情。
Cookie剖析
Cookie通常在HTTP資訊頭中設定(雖然JavaScript能夠直接在瀏覽器中設定cookie)。在JSP中,設定一個cookie需要傳送如下的資訊頭給伺服器:
HTTP/1.1 200 OK
Date: Wed, 10 May 2017 03:33:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=runoob; expires=Wednesday, 10-May-17 04:33:38 GMT;
path=/; domain=runoob.com
Connection: close
Content-Type: text/html
Set-Cookie資訊頭包含一個鍵值對,一個GMT(格林尼治標準)時間,一個路徑,一個域名。鍵值對會被編碼為URL。有效期域是個指令,告訴瀏覽器在什麼時候之後就可以清除這個cookie。
如果瀏覽器被配置成可儲存cookie,那麼它將會儲存這些資訊直到過期。如果使用者訪問的任何頁面匹配了cookie中的路徑和域名,那麼瀏覽器將會重新將這個cookie發回給伺服器。瀏覽器端的資訊頭長得就像下面這樣:
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設定Cookie
使用JSP設定cookie包含三個步驟:
/**
* (1)建立一個Cookie物件:
* 呼叫Cookie的建構函式,使用一個cookie名稱和值做引數,它們都是字串。
*/
Cookie cookie = new Cookie("key","value");
/**
* (2)設定有效期:
* 呼叫setMaxAge()函式表明cookie在多長時間(以秒為單位)內有效。
*/
cookie.setMaxAge(60*60*24);
/**
* (3) 將cookie傳送至HTTP響應頭中:
* 呼叫response.addCookie()函式來向HTTP響應頭中新增cookie。
*/
response.addCookie(cookie);
需要注意的是:JSP Cookie 處理需要對中文進行編碼與解碼。
String str = java.net.URLEncoder.encode("中文","UTF-8"); //編碼
String str = java.net.URLDecoder.decode("編碼後的字串","UTF-8"); // 解碼
例項:
cookieTest.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie Test</title>
</head>
<body>
<form action="setCookie.jsp" method=GET>
使用者: <input type="text" name="name">
<br />
密碼: <input type="text" name="pwd" />
<hr>
<input type="submit" value="提交" />
</form>
</body>
</html>
setCookie.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.net.*"%>
<%
// 編碼,解決中文亂碼
String para_name = URLEncoder.encode(request.getParameter("name"), "utf-8");
String para_pwd = URLEncoder.encode(request.getParameter("pwd"), "utf-8");
// 設定 name 和 url cookie
Cookie name = new Cookie("name", para_name);
Cookie pwd = new Cookie("pwd", para_pwd);
// 設定cookie過期時間為1小時。
name.setMaxAge(60 * 60 * 1);
pwd.setMaxAge(60 * 60 * 1);
// 在響應頭部新增cookie
response.addCookie(name);
response.addCookie(pwd);
%>
<html>
<head>
<meta charset="utf-8">
<title>Cookie Test</title>
</head>
<body>
<p>此頁在jsp程式碼裡設定了cookie。</p>
<p>請在瀏覽器檢視剛設定的cookie</p>
</body>
</html>
效果圖:
執行:
檢視cookie:
JSP讀取Cookie
JSP讀取cookie,需要呼叫request.getCookies()方法來獲得一個javax.servlet.http.Cookie物件的陣列。該陣列儲存了cookie的所有鍵值對。
接下來我們讀取剛才的cookie。
cookieTest.html裡的程式碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookie Test</title>
</head>
<body>
<form action="setCookie.jsp" method=GET>
使用者: <input type="text" name="name">
<br />
密碼: <input type="text" name="pwd" />
<hr>
<input type="submit" value="提交" />
</form>
<br>
<hr>
<form action="getCookie.jsp" method=GET>
<input type="submit" value="getCookie" />
</form>
</body>
</html>
getCookie.jsp裡的程式碼:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.net.*"%>
<html>
<head>
<meta charset="utf-8">
<title>Cookie Test</title>
</head>
<body>
<h1>getCookie</h1>
<%
Cookie[] cookies = request.getCookies();
for(int i=0; i<cookies.length; i++){
out.print("<p>");
out.print("key:"+cookies[i].getName());
out.print("<br>");
out.print("value:"+cookies[i].getValue());
out.print("</p><hr>");
}
%>
</body>
</html>
執行效果:
JSP刪除Cookie
- 獲取一個已經存在的cookie然後儲存在Cookie物件中。
- 將cookie的有效期設定為0。
- 將這個cookie重新新增進響應頭中。
這個比較簡單就不演示了。