前兩天看見有兄弟問cookie為什么刪除不了,所以寫了給小總結,希望對用cookie的各位兄弟有幫助
對于cookie,最主要的當然是讀取和設置了,下面分兩方面說明.
一、設置
Cookie是通過HttpServletResponse的addCookie方法加入到Set-Cookie應答頭中的
例如:
Cookie userCookie = new Cookie("user", "admin");
response.addCookie(userCookie);
和設置有關系的還有以下兩個重要方法
1.setMaxAge
設置Cookie過期之前的時間,以秒計。如果不設置該值,則Cookie只在當前會話內有效,而且這些Cookie不會保存到磁盤上。
注意:刪除cookie就是通過該方法實現的。將要刪除的cookie的過期之前的時間指定為0就可以達到刪除該cookie的目的。
2.setPath
設置Cookie適用的路徑。如果不指定路徑,Cookie將返回給當前頁面(JSP頁面或者Servlet的映射)所在目錄及其子目錄下的所有頁面。
注意:
A:所有的cookie都是有路徑的
B:該方法設置的路徑為客戶端路徑,即“/”代表服務器根目錄,而不是WEB應用根目錄
C:該方法設置路徑時,“/myWeb/”與“/myWeb”是不同的,要特別注意;前者可以關聯到服務器的myWeb目錄下,而或者則不可以。
D:該方法設置路徑時,沒有相對目錄可言,即不論在哪個目錄下設置setPath(“/myWeb/”),該cookie都將關聯到服務器的myWeb目錄下(setPath(“/myWeb”)則不可以),而不是當前目錄的myWeb的子目錄下;同樣,設置setPath(“myWeb/”)和setPath(“myWeb”)也不能關聯到當前目錄的myWeb的子目錄下
這里有個奇怪的例子,就是在一個web應用下設置的cookie可以在另一個web應用下獲得(兩個web應用在同一個服務器下)
目錄結構:在服務器根目錄上有web1和web2兩個目錄,在web1下有setcookie.jsp和getcookie.jsp、在web2下有getcookie.jsp
web1下的setcookie.jsp
<%
Cookie userCookie = new Cookie("user", "admin");
userCookie.setMaxAge(24*60*60);
userCookie.setPath("/web2/");
response.addCookie(userCookie);
%>
web1下的getcookie.jsp
<%
Cookie[] cookie = request.getCookies();
String user = new String();
if ( cookie != null ) {
for (int i = 0; i < cookie.length; i++) {
Cookie myCookie = cookie[i];
if (myCookie.getName().equals("user")) {
user = myCookie.getValue();
}
}
}
out.println("user = " + user);
%>
web2下的getcookie.jsp
<%
Cookie[] cookie = request.getCookies();
String user = new String();
if ( cookie != null ) {
for (int i = 0; i < cookie.length; i++) {
Cookie myCookie = cookie[i];
if (myCookie.getName().equals("user")) {
user = myCookie.getValue();
}
}
}
out.println("user = " + user);
%>
先訪問web1下的setcookie.jsp,然后分別訪問web1和web2下面的getcookie.jsp文件,你會發現奇怪的現象,web1下的getcookie.jsp中user為空而web2下的getcookie.jsp中user卻有值,這就實現了從一個web應用下設置的cookie在另一個web應用下獲得。
大多數人刪除cookie不成功都是因為目錄原因。一個典型的原因是在某一個目錄中設置了cookie(沒有調用setPath方法)卻在另一個目錄中刪除該cookie(其實是調用setMaxAge方法)
二、讀取
從客戶端讀取Cookie時調用的是HttpServletRequest的getCookies方法。該方法返回一個與HTTP請求頭中的內容對應的Cookie對象數組。得到這個數組之后,一般是用循環訪問其中的各個元素,調用getName檢查各個Cookie的名字,直至找到目標Cookie。然后對這個目標Cookie調用getValue,根據獲得的結果進行其他處理。
注意:若JSP和Servlet所在目錄(Servlet為其映射目錄)的父目錄中有同名cookie,則request.getCookie()方法得到的Cookie數組中保存的是其父目錄中的cookie的信息;
from:
http://www.cndiy8.com/data/web5409/20050311/20050311__3812885.html