jsp的cookie技術整理

2021-07-10 01:26:56 字數 3058 閱讀 1058

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...