TTP協議是無狀態的,即資訊無法通過HTTP協議本身進傳遞。為了跟蹤使用者的操作狀態,ASP應用SESSION對象。JSP使用一個叫HttpSession的對象實現同樣的功能。HTTPSession 是一個建立在cookies 和URL-rewriting上的高品質的介面。Session的資訊儲存在伺服器端,Session的id儲存在客戶機的cookie中。事實上,在許多伺服器上,如果瀏覽器支援的話它們就使用cookies,但是如果不支援或廢除了的話就自動轉化為URL-rewriting,session自動為每個流程提供了方便地儲存資訊的方法。
Session一般在伺服器上設定了一個30分鐘的到期時間,當客戶停止活動後自動失效。Session 中儲存和檢索的資訊不能是基礎資料型別 (Elementary Data Type)如 int, double等,而必須是java的相應的對象,如Integer, Double。
Httpsession具有如下API:
getId 此方法返回唯一的標識,這些標識為每個session而產生。當只有一個單一的值與一個session聯合時,或當日誌資訊與先前的sessions有關時,它被當作鍵名用。
GetCreationTime 返回session被建立的時間。最小單位為千分之一秒。為得到一個對列印輸出很有用的值,可將此值傳給Date constructor 或者GregorianCalendar的方法setTimeInMillis。
GetLastAccessedTime 返回session最後被客戶發送的時間。最小單位為千分之一秒。
GetMaxInactiveInterval 返回總時間(秒),負值表示session永遠不會逾時。
getAttribute 取一個session相聯絡的資訊。(在jsp1.0中為 getValue)
Integer item = (Integer) session.getAttrobute("item") //檢索出session的值並轉化為整型
setAttribute 提供一個關鍵詞和一個值。會替換掉任何以前的值。(在jsp1.0中為putValue)
session.setAttribute("ItemValue", itemName); // ItemValue 必須不是must簡單類型
在應用中使用最多的是getAttribute和setAttribute。現以一個簡單的例子來說明session的應用, test1.jsp(資訊寫入session),test2.jsp(從session讀出資訊)。
test1.jsp
<HTML> <HEAD> <TITLE> Document </TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF"> session.setAttribute("str",new String(“this is test”)); </BODY> </HTML> test2.jsp <HTML> <HEAD> <TITLE> New Document </TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF"> <% String ls_str=null; ls_str=(String)session.getAttribute("str"); out.println(“從session裡取出的值為:”+ls_str); %> </BODY> </HTML> |