1. 程式人生 > >session.setAttribute()和session.getAttribute()

session.setAttribute()和session.getAttribute()

Session簡單介紹

  在WEB開發中,伺服器可以為每個使用者瀏覽器建立一個會話物件(session物件),注意:一個瀏覽器獨佔一個session物件(預設情況下)。因此,在需要儲存使用者資料時,伺服器程式可以把使用者資料寫到使用者瀏覽器獨佔的session中,當用戶使用瀏覽器訪問其它程式時,其它程式可以從使用者的session中取出該使用者的資料,為使用者服務。

Session和Cookie的主要區別

  • Cookie是把使用者的資料寫給使用者的瀏覽器。
  • Session技術把使用者的資料寫到使用者獨佔的session中。
  • Session物件由伺服器建立,開發人員可以呼叫request物件的getSession方法得到session物件。

基本語法

 

1,對於值型別的變數,Session中儲存的是值型別的拷貝

Session["__test0"] = 1;

int i = (int)Session["__test0"]+1;

int j = (int)Session["__test0"];

結果:i=2,j=1

2,對於引用型別的變數,Session中儲存的是引用

CDACommon cda = new CDACommon();

Session["__test"] = cda.GetDataSet("select top 1 * from tb_customer");

DataSet ds = (DataSet)Session["__test"];

DataSet ds2 = (DataSet)Session["__test"];

ds.Tables[0].Rows[0][0]="9999";

結果:

ds.Tables[0].Rows[0][0]=="9999"

ds2.Tables[0].Rows[0][0]=="9999";

3,Session週期

新的瀏覽器視窗啟動後,開始一個新的Session,觸發Global的Session_Start的呼叫,從第一個瀏覽器視窗開啟的瀏覽器視窗不啟動新的Session。Session過期後,執行頁面的提交也會觸發Session_Start,等於是新的一個Session。

4,呼叫Session

對於Web Service,每個方法的呼叫都會啟動一個Session,可以用下面的方法來使多個呼叫在同一個Session裡  CWSSyscfg cwsCfg = new CWSSyscfg(); cwsCfg.CookieContainer = new System Net.CookieContainer(); CWSSyscfg是一個Web Service類,Web Service的給代理類設定CookieContainer屬性,只要多個代理的CookieContainer屬性是相同的值,則對這些Web Service的呼叫在同一個Session。可以用單例模式來實現。

5,Session資料有效期

只要頁面有提交活動,則Session的所有項都會保持,頁面在20分鐘(預設配置)內沒有任何提交活動時Session會失效。Session記憶體儲的多個資料項是整體失效的。

6,Session的儲存

在Session中如果儲存的是非序列化的類比如DataView,在用SQLServer儲存Session的模式下,無法使用。檢視一個類是否是序列化的方法是,需看是否用[Serializable]來標記了該類.

在JSP中

Jsp的session是使用bean的一個生存期限,一般為page,session意思是在這個使用者沒有離開網站之前一直有效,如果無法判斷使用者何時離開,一般依據系統設定,tomcat中設定為30分鐘.

JSP使用一個叫HttpSession的物件實現同樣的功能。HTTPSession 是一個建立在cookies 和URL-rewriting上的高質量的介面。Session的資訊儲存在伺服器端,Session的id儲存在客戶機的cookie中。事實上,在許多伺服器上,如果瀏覽器支援的話它們就使用cookies,但是如果不支援或廢除了的話就自動轉化為URL-rewriting,session自動為每個流程提供了方便地儲存資訊的方法。

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.getAttribute("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>

參考頁面,個人覺得很詳細