cookie,有時也用其複數形式cookies,指某些**為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料(通常經過加密)。定義於rfc2109(已廢棄),最新取代的規範是rfc2965。
在jsp中建立簡單的cookie:
string cookiename="visittimes";
cookie cookie=new cookie(cookiename,"1");
cookie.setmaxage(10*60);//設定cookie存活期
cookie.addcookie(cookie);//將cookie寫入
客戶端
在jsp中處理cookie資料的常用方法:
getdomain();返回cookie的網域名稱.
getmaxage();返回cookie的存活時間
getname();返回cookie的名字
getpath();返回cookie適用的路徑
getsecure();如果瀏覽器通過安全協議傳送cookie將返回true值,如果瀏覽器使用標準協議剛返回false值
getvalue();返回cookie的值
getversion();返回cookie所遵從的協議版本
setcomment(string purpose);設定cookie的注釋
setpath(string url);設定cookie的適用路徑
setsecure(boolean flag);設定瀏覽器是否僅僅使用安全協議來傳送cookie,例如使用https或ssl
setvalue(string newvalue);cookie建立後設定乙個新的值
setversion(int v);設定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 ) }}
out.println("user = " + user);
%>
web2下的getcookie.jsp
<%
cookie cookie = request.getcookies();
string user = new string();
if ( cookie != null ) }}
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的資訊。
Cookie簡介及JSP處理Cookie的方法
說了這麼多,大家一定很想知道jsp是如何建立cookie了。jsp是使用如下的語法格式來建立cookie的 cookie cookie name new cookie parameter value 例如 cookie newcookie new cookie username waynezheng...
JSP中Cookie的讀寫
jsp中cookie的讀寫 cookie的本質是乙個鍵值對,當瀏覽器訪問web伺服器的時候寫入在客戶端機器上,裡面記錄一些資訊。cookie還有一些附加資訊,比如網域名稱 有效時間 注釋等等。下面是乙個jsp中寫入讀取cookie的測試 在頂級網域名稱中寫入cookie,在子網域名稱中讀取,目的是實...
jsp讀寫session和cookie的方法
定義乙個session變數 session.setattribute user name joan 讀取乙個session的值 string your name session.getattribute user name 判斷乙個session是否存在應用 if string session.ge...