JSP Cookie的使用
Cookie是在Client端留下的資訊,一般新增一個Cookie是使用如下的方式
Cookie ck = new Cookie(索引值, 資料內容);
response.addCookie(ck);
而Cookie的取出,則是使用如下的方式
Cookie ck[] = request.getCookies();
int i;
for(i=0;i<ck.length;i++) {
out.print("ck.name="+ck[i].getName());
out.print(" value=" + ck[i].getValue()+"<BR>");
Cookie.getName() 便是取得當時Cookie存入時的 索引值
Cookie.getValue() 便是取得當時Cookie存入時的 資料內容
而Cookie的取出沒有他法,全都只能使用以下方式,把所有Cookie都讀出
Cookie ck[] = request.getCookies();
而Cookie的生命週期有多長,是由Cookie 名稱.setMaxAge(秒數)來設定,如果沒有設定之,則Cookie會在Browser結束掉時結束。如果設定秒數=3600,代表該Cookie可以由設定的時間算起,活3600秒(1小時),就算Browser結束掉後再進來,只要在一小時之內,都可以讀取到該Data。但若設為0,代表要刪除該Cookie。
Cookie是server傳送給瀏覽器一段資訊(都是文字,且中間不能有空白),瀏覽器收到cookie後會將其儲存起
來,之後每次讀取這部server上的網頁時,就根據一些規則把以前收到cookie傳給server。但Cookie使用
上需依賴client是否有接受cookie的設定限制。傳送到客戶端的Cookie物件,可不限一個,如果有多個Cookie
物件要傳送的話,可以連續執行addCookie(),把所有的Cookie都加至response物件,一次將所有Cookie都送
至對方的瀏覽器內。
Cookie可以透過c.setMaxAge()函式來設定有效時間,如果c.setMaxAge()內的參數是一個正整數值,
則單位就是以秒來計算,數值越大則Cookie物件的有效的時間越久,若參數值為0,則表示Cookie物
件存放在瀏覽器後將立即失效,若參數為負整數值時,則當瀏覽器被關閉後,此此Cookie物件也馬上
失效
然而,若兩個不同的網站都使用Cookie,而索引值也相同,但內容不同時,後面網站的設定會OverWrite前面網站的設定嗎?答案是不會,我們可以在Window的根目錄(如:C:\Windows或C:\WinNt )下找一個Cookies的Directory,該Directory內的資料便是Cookies存放的地方,不同的網站會把Cookies存在不同的File之中,所以沒有這OverWrite的問題。
Cookie.jsp
<HTML>
<HEAD>
<TITLE>
Jsp2
</TITLE>
</HEAD>
<BODY>
<%
Cookie ck = new Cookie("cww2","test2!!");
ck.setMaxAge(65536);
response.addCookie(ck);
%>
</BODY>
</HTML>
GetCookie 之範例
<HTML>
<HEAD>
<TITLE>
getcookie
</TITLE>
</HEAD>
<BODY>
<H1>
JBuilder Generated JSP
</H1>
<%
Cookie ck[] = request.getCookies();
int i;
for(i=0;i<ck.length;i++) {
out.print("ck.name="+ck[i].getName());
out.print(" value=" + ck[i].getValue()+"<BR>");
}
%>
ok
</BODY>
Session是某段時間內一連串客戶端與伺服端的talking,這連線會一直持續到某個時間後,不再向
Web要求.jsp網頁時才結束(即timeout)或者使用session.invalidate()。一個session可能包含一個使用者
的多個請求(request)。
因為http不具有狀態,所以若需要保持使用狀態,就需要cookie或session。但是session可能會timeout,
而cookie可能被disable,所以有時得用隱藏欄位來做事情。
每一個客戶端都對應著一個session物件用來存放與這個客戶端相關的交易資料,而存放在這個
session物件內的資料,可以是複雜的物件型態,並非單純的文字。
通常在JSP程式中,不需要特別寫任何程式就可取用session物件,但也可在JSP程式中加入
<%@ page session=“true”%>,表示session功能已啟動,若設為false時,代表要關閉session功能。
session.isNew()是一boolean
若傳回值為true,代表為第一次被建立使用,若為false則代表為正在被使用中。
session.getMaxInactiveInterval() 此一函式是用來讀取此一session的有效期限。
session.setMaxInactiveInterval(1800) 表示設定session的有效期限,參數型態為整數,單位為秒。
session.getAttribute(String name) 取得指定索引鍵中的值,參數型態為字串,表索引鍵名,
傳回值為一object型態,必須透過轉型才能轉換成正確的類別型態。
session.putAttribute(String name,Object Value)
session的存放格式如cookie一樣,是為“索引值(key)=值(value)” ,但存入值的型態為物件
型態,第一參數為索引鍵,第二為要存入session的物件。
session.removeAttribute(String name)
移除session物件中不需再使用的索引鍵,參數為字串型態,代表要移除的索引鍵。
session.getId() 取得session的識別資訊
session.getValueNames() 傳回所有存放在session物件中的索引鍵名
session.invalidate() 中斷session
session.getLastAccessedTime() 傳回long表示離1970/1/1 00:00:00最後access的毫秒數
session.getCreationTime() 回long表示離1970/1/1 00:00:00 create的毫秒數
沒有留言:
張貼留言