Java web,session.ppt_第1頁
Java web,session.ppt_第2頁
Java web,session.ppt_第3頁
Java web,session.ppt_第4頁
Java web,session.ppt_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、2020年9月2日,1,第九章 使用會話追蹤,2020年9月2日,2,本節(jié)課的內(nèi)容: 什么是客戶會話 會話的工作機制 維護會話的幾種方式 跟蹤客戶會話 使用HttpSession對象維護會話信息 監(jiān)視會話對象,2020年9月2日,3,典型的在線商店的情況: 用戶剛剛在一個頁面中挑選到一種商品,添加到購物車中,在下一個商品頁面中又挑選到一種添加到購物車中。 注意到這兩次選擇是在不同的HTTP連接中發(fā)生的。而用戶希望兩次挑選的商品在同一個購物車中一起交付,而不是每選一件商品都要交付一次。這就需要一種機制來唯一的標(biāo)識用戶,以便跟蹤客戶在站點中的行為。 會話: 這種在多次HTTP連接間維護用戶與同一用

2、戶發(fā)出的不同請求之間關(guān)聯(lián)的情況稱為維護一個會話(session)。,1、什么是會話,2020年9月2日,4,2、會話的特征 會話能夠把用戶與同一用戶發(fā)出的不同請求之間關(guān)聯(lián)起來。不同用戶的會話應(yīng)當(dāng)是相互獨立的。 會話一旦建立就應(yīng)當(dāng)一直存在,直到用戶空閑時間超過了某一個時間界限,容器才應(yīng)當(dāng)釋放該會話資源。 在會話的存活期間,用戶可能給服務(wù)器發(fā)送了很多請求,該用戶的這些請求信息都可以存儲在會話中。,2020年9月2日,5,網(wǎng)上購物商店的購物車,3、會話的工作機制,用戶輸入個人信用信息登錄到網(wǎng)上商店,商店為用戶創(chuàng)建一個獨一無二的、用戶獨有的會話對象-購物車,用戶瀏覽產(chǎn)品頁,察看商品介紹,并點擊“加入”

3、按鈕。,商品信息在一次HTTP連接中傳遞到服務(wù)器,在服務(wù)器,該商品的相關(guān)信息保存在用戶的會話對象中,當(dāng)用戶離開網(wǎng)上商店前,被詢問是否購買。,當(dāng)用戶選擇“YES”確認(rèn)購買時,服務(wù)器會將會話對象中的商品信息保存到數(shù)據(jù)庫中,并聯(lián)系網(wǎng)上銀行和郵局向用戶發(fā)貨。,2020年9月2日,6,在上述的網(wǎng)上商店中,用戶的會話信息保存在服務(wù)器端,用戶與服務(wù)器之間必須提供一種機制,標(biāo)識某一用戶與他在服務(wù)器端用戶狀態(tài)之間的對應(yīng)關(guān)系。這種機制必須保證: 允許用戶在不同頁面(如:Servlet)間瀏覽而不會丟失“購物車” 必須避免不同用戶的“購物車”混淆。用戶不會允許自己為別的用戶付款。 不幸的是通常情況下Web服務(wù)器不會

4、自動跟蹤用戶操作軌跡。捕獲并存儲用戶軌跡是Web應(yīng)用開發(fā)人員的工作。,2020年9月2日,7,客戶第一次訪問網(wǎng)站時,將會話信息添加到由服務(wù)器發(fā)出的每一個響應(yīng)的URL中。 當(dāng)用戶再次訪問網(wǎng)站時,URL中會把這個會話信息作為用戶請求參數(shù)返回服務(wù)器端,服務(wù)器根據(jù)返回的會話信息來標(biāo)識該客戶,維護整個會話的信息持續(xù)性。 常見的URL重寫格式 為了保持URL的簡潔,通常這個嵌在URL中的會話信息是一個由服務(wù)器生成的代表客戶的唯一性的ID號,在URL的表現(xiàn)形式上,它通常是作為URL查詢參數(shù)的形式出現(xiàn)的,如: http:/./ch09/huihua.jsp?sessionid=678,4、維護會話的方式-UR

5、L重寫,2020年9月2日,8,Session.jsp Tom.jsp Jerry.jsp,2020年9月2日,9,URL重寫技術(shù)的優(yōu)點: 用戶是匿名的; 在Web服務(wù)器實現(xiàn)上得到普遍的支持; URL重寫技術(shù)的缺點: 由于會話信息作為查詢參數(shù)在URL上是可見的,因此會話存在一定的安全隱患; 需要對所有動態(tài)生成的URL進行重寫,代碼比較繁瑣; 只能用于動態(tài)產(chǎn)生的文檔如Servlet和JSP頁面,而不能用于HTML文檔; 重寫的URL不能長期有效,2020年9月2日,10,隱藏窗體技術(shù)原理 HTML表單允許把一些字段信息隱藏起來,而在瀏覽器上不被顯示出來。例如: 使用隱藏窗體技術(shù)實現(xiàn)會話管理 這種

6、方式的工作機制為:在用戶第一次請求時,服務(wù)器在為客戶準(zhǔn)備的頁面上添加一個或多個隱藏表單,把一些要隱藏的信息如標(biāo)識該客戶的ID號存儲在那里。當(dāng)客戶提交該表單時,這些信息會作為查詢參數(shù)返回服務(wù)器,服務(wù)器可以利用HttpServletRequest對象的getParameter()方法讀取出來。這樣就達到了在服務(wù)器端維護會話信息持續(xù)的作用。,5、隱藏窗體技術(shù),2020年9月2日,11,可以這樣認(rèn)為,同重寫URL技術(shù)相比,隱藏窗體技術(shù)在表單參數(shù)中傳遞會話信息,而重寫URL技術(shù)是在GET參數(shù)中傳遞會話信息。除了這點,二者并無根本區(qū)別。,2020年9月2日,12,上面我們分別說明了如何使用URL重寫、co

7、okie和隱藏表單這三種方式來跟蹤用戶會話。不管采用何種方式,都應(yīng)實現(xiàn)以下步驟: 1、服務(wù)器必須為每個會話產(chǎn)生一個唯一的ID號 2、在服務(wù)器和客戶瀏覽器之間傳遞這個ID號以維持會話 3、服務(wù)器端根據(jù)ID號維護相關(guān)客戶的會話信息,2020年9月2日,13,Servlet2.3規(guī)范定義了一個HttpSession接口,允許Servlet容器針對每一個用戶建立一個HTTP會話(即HttpSession對象),每個HTTP會話將會自動被賦予一個唯一的會話編號(session ID),而無需程序員編程實現(xiàn)。 HttpSession對象提供了和ServletContext對象相似的一組會話屬性的方法,這樣

8、就可以很容易地在服務(wù)器端存放用戶會話狀態(tài)。,6、使用內(nèi)建的Session對象,2020年9月2日,14,HttpServletRequest對象提供了getSession方法,通過這個方法,Servlet就可以獲得與當(dāng)前請求關(guān)聯(lián)的會話對象的引用。該方法為重載的方法,有兩個版本: public HttpSession getSession();返回與當(dāng)前請求相關(guān)聯(lián)的會話,如果當(dāng)前請求還沒有一個相關(guān)聯(lián)的會話,就創(chuàng)建一個并返回。 public HttpSession getSession(bool bCreate);返回與當(dāng)前請求相關(guān)聯(lián)的會話對象。如果沒有,且參數(shù)create的值為true,則創(chuàng)建并

9、返回一個新的會話。如果create的值為false,且請求沒有相關(guān)聯(lián)的會話對象,將返回null??梢岳眠@點判斷用戶是否為第一次訪問站點:如果getSession(false)返回null,則表示用戶是第一次訪問站點,如果返回非null則表示用戶不是第一次訪問站點。,7、會話與請求的關(guān)系,2020年9月2日,15,獲取與請求關(guān)聯(lián)的會話對象 HttpSession s = request.getSession(); String sid = s.getId(); if(s.isNew() out.println(新的會話ID=+sid+); else out.println(歡迎回來,User:

10、+sid+); ,會話與請求的關(guān)系,總是返回一個會話。但是我們不知道該會話是新建的還是已有的。,獲得會話ID并保存到字符串中。該串將類似于:32FE24119D28C30866C9EF4BEA40EF4E,判斷會話是新建的還是舊的。,2020年9月2日,16,會話ID servlet容器在創(chuàng)建每一個新的HTTP會話對象時,都會賦予一個新的ID號。 servlet容器保證它在Web應(yīng)用范圍內(nèi)是唯一的。 會話ID是實際包含在Http請求/響應(yīng)報文中的會話數(shù)據(jù)。 這個ID號可以通過HttpSession對象的getId()獲得。例如: HttpSession session=request.getS

11、ession(); String sessionId=session.getId();,2020年9月2日,17,HttpSession工作原理 當(dāng)用戶第一次發(fā)出請求時,Servlet容器會建立一個HttpSession對象,并自動分配一個Web應(yīng)用范圍內(nèi)唯一的Session ID與之對應(yīng)。這個Session ID也會隨著HTTP響應(yīng)內(nèi)容傳遞給用戶端瀏覽器。傳遞的方式默認(rèn)情況下為cookie,如果用戶端瀏覽器關(guān)閉了cookie功能,就會使用URL重寫技術(shù)傳遞給用戶瀏覽器。 在用戶發(fā)出的后續(xù)請求中,請求信息中會包含Servelt容器傳遞給它的Session ID。Servlet容器就會根據(jù)傳回的

12、Session ID將原來建立的HttpSession對象將請求與HttpServletRequest對象關(guān)聯(lián)起來。所以,對于同一個用戶,調(diào)用getSession()方法返回的將是同一個HttpSession對象。,會話與請求的關(guān)系,2020年9月2日,18,與ServletContext對象類似,我們可以給HttpSession對象綁定屬性。 ServletContext對象的屬性的作用域是Web應(yīng)用程序,在這個應(yīng)用程序下的所有Servlet都共享這些屬性; 綁定到HttpSession對象上的屬性只在一次會話周期內(nèi)有效,且只有在屬于該會話的HttpRequest對象中才可以訪問這些屬性。換

13、句話說,會話屬性就是特定用戶的專用數(shù)據(jù),同時訪問Web應(yīng)用的其他用戶無法訪問這些屬性。,HttpSession對象的屬性,2020年9月2日,19,返回由name指定的會話屬性,如果name指定的屬性不存在將返回null。例如:在同一用戶的會話有效期內(nèi)的其他地方,我們可以把綁定到HttpSession對象上的對象取出來: HttpSession session=request.getSession(true); Account acct=session.getAttribute(account);,刪除由name指定的HttpSession對象的會話屬性,如果由name指定的屬性不存在,方法將

14、直接返回。例如: HttpSession session=request.getSession(true); session.removeAttribute(account);,HttpSession接口使用以下方法管理綁定到會話的屬性 void setAttribute(String name,Object value) Object getAttribute(String name) void removeAttribute(String name),HttpSession接口方法訪問屬性,將一個對象綁定到HttpSession對象,使之成為HttpSession對象的一個會話屬性。調(diào)用時

15、由value指定的對象將變成其name屬性。如果name屬性已經(jīng)存在,它原來對應(yīng)的對象將由vlaue指定的對象置換掉。 Account acct=new Account(); HttpSession session=request.getSession(true); session.setAttribute(account,acct); session.setAttribute(account“,new Integer(100);,2020年9月2日,20,如果要終止某個HTTP會話,可以使用下面的幾種方式 public void invalidate()方法 public void setM

16、axInactiveInterval(int interval) 方法 在web.xml中配置會話的生存時間,HttpSession接口方法終止會話,調(diào)用該方法將終止某個HTTP會話。之后如果嘗試向這個會話綁定屬性,將會得到一個IllegalStateException異常,例如: HttpSession session=request.getSession(true); session.invalidate(); Account acct=new Account(); session.setAttribute(account,acct); /本句拋出IllegalStateException,設(shè)置HTTP會話的超時時間,單位為秒。例如: HttpSession session=request.getSession(true); sess

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論