版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2020年9月2日,1,第九章 使用會(huì)話追蹤,2020年9月2日,2,本節(jié)課的內(nèi)容: 什么是客戶會(huì)話 會(huì)話的工作機(jī)制 維護(hù)會(huì)話的幾種方式 跟蹤客戶會(huì)話 使用HttpSession對(duì)象維護(hù)會(huì)話信息 監(jiān)視會(huì)話對(duì)象,2020年9月2日,3,典型的在線商店的情況: 用戶剛剛在一個(gè)頁(yè)面中挑選到一種商品,添加到購(gòu)物車(chē)中,在下一個(gè)商品頁(yè)面中又挑選到一種添加到購(gòu)物車(chē)中。 注意到這兩次選擇是在不同的HTTP連接中發(fā)生的。而用戶希望兩次挑選的商品在同一個(gè)購(gòu)物車(chē)中一起交付,而不是每選一件商品都要交付一次。這就需要一種機(jī)制來(lái)唯一的標(biāo)識(shí)用戶,以便跟蹤客戶在站點(diǎn)中的行為。 會(huì)話: 這種在多次HTTP連接間維護(hù)用戶與同一用
2、戶發(fā)出的不同請(qǐng)求之間關(guān)聯(lián)的情況稱(chēng)為維護(hù)一個(gè)會(huì)話(session)。,1、什么是會(huì)話,2020年9月2日,4,2、會(huì)話的特征 會(huì)話能夠把用戶與同一用戶發(fā)出的不同請(qǐng)求之間關(guān)聯(lián)起來(lái)。不同用戶的會(huì)話應(yīng)當(dāng)是相互獨(dú)立的。 會(huì)話一旦建立就應(yīng)當(dāng)一直存在,直到用戶空閑時(shí)間超過(guò)了某一個(gè)時(shí)間界限,容器才應(yīng)當(dāng)釋放該會(huì)話資源。 在會(huì)話的存活期間,用戶可能給服務(wù)器發(fā)送了很多請(qǐng)求,該用戶的這些請(qǐng)求信息都可以存儲(chǔ)在會(huì)話中。,2020年9月2日,5,網(wǎng)上購(gòu)物商店的購(gòu)物車(chē),3、會(huì)話的工作機(jī)制,用戶輸入個(gè)人信用信息登錄到網(wǎng)上商店,商店為用戶創(chuàng)建一個(gè)獨(dú)一無(wú)二的、用戶獨(dú)有的會(huì)話對(duì)象-購(gòu)物車(chē),用戶瀏覽產(chǎn)品頁(yè),察看商品介紹,并點(diǎn)擊“加入”
3、按鈕。,商品信息在一次HTTP連接中傳遞到服務(wù)器,在服務(wù)器,該商品的相關(guān)信息保存在用戶的會(huì)話對(duì)象中,當(dāng)用戶離開(kāi)網(wǎng)上商店前,被詢(xún)問(wèn)是否購(gòu)買(mǎi)。,當(dāng)用戶選擇“YES”確認(rèn)購(gòu)買(mǎi)時(shí),服務(wù)器會(huì)將會(huì)話對(duì)象中的商品信息保存到數(shù)據(jù)庫(kù)中,并聯(lián)系網(wǎng)上銀行和郵局向用戶發(fā)貨。,2020年9月2日,6,在上述的網(wǎng)上商店中,用戶的會(huì)話信息保存在服務(wù)器端,用戶與服務(wù)器之間必須提供一種機(jī)制,標(biāo)識(shí)某一用戶與他在服務(wù)器端用戶狀態(tài)之間的對(duì)應(yīng)關(guān)系。這種機(jī)制必須保證: 允許用戶在不同頁(yè)面(如:Servlet)間瀏覽而不會(huì)丟失“購(gòu)物車(chē)” 必須避免不同用戶的“購(gòu)物車(chē)”混淆。用戶不會(huì)允許自己為別的用戶付款。 不幸的是通常情況下Web服務(wù)器不會(huì)
4、自動(dòng)跟蹤用戶操作軌跡。捕獲并存儲(chǔ)用戶軌跡是Web應(yīng)用開(kāi)發(fā)人員的工作。,2020年9月2日,7,客戶第一次訪問(wèn)網(wǎng)站時(shí),將會(huì)話信息添加到由服務(wù)器發(fā)出的每一個(gè)響應(yīng)的URL中。 當(dāng)用戶再次訪問(wèn)網(wǎng)站時(shí),URL中會(huì)把這個(gè)會(huì)話信息作為用戶請(qǐng)求參數(shù)返回服務(wù)器端,服務(wù)器根據(jù)返回的會(huì)話信息來(lái)標(biāo)識(shí)該客戶,維護(hù)整個(gè)會(huì)話的信息持續(xù)性。 常見(jiàn)的URL重寫(xiě)格式 為了保持URL的簡(jiǎn)潔,通常這個(gè)嵌在URL中的會(huì)話信息是一個(gè)由服務(wù)器生成的代表客戶的唯一性的ID號(hào),在URL的表現(xiàn)形式上,它通常是作為URL查詢(xún)參數(shù)的形式出現(xiàn)的,如: http:/./ch09/huihua.jsp?sessionid=678,4、維護(hù)會(huì)話的方式-UR
5、L重寫(xiě),2020年9月2日,8,Session.jsp Tom.jsp Jerry.jsp,2020年9月2日,9,URL重寫(xiě)技術(shù)的優(yōu)點(diǎn): 用戶是匿名的; 在Web服務(wù)器實(shí)現(xiàn)上得到普遍的支持; URL重寫(xiě)技術(shù)的缺點(diǎn): 由于會(huì)話信息作為查詢(xún)參數(shù)在URL上是可見(jiàn)的,因此會(huì)話存在一定的安全隱患; 需要對(duì)所有動(dòng)態(tài)生成的URL進(jìn)行重寫(xiě),代碼比較繁瑣; 只能用于動(dòng)態(tài)產(chǎn)生的文檔如Servlet和JSP頁(yè)面,而不能用于HTML文檔; 重寫(xiě)的URL不能長(zhǎng)期有效,2020年9月2日,10,隱藏窗體技術(shù)原理 HTML表單允許把一些字段信息隱藏起來(lái),而在瀏覽器上不被顯示出來(lái)。例如: 使用隱藏窗體技術(shù)實(shí)現(xiàn)會(huì)話管理 這種
6、方式的工作機(jī)制為:在用戶第一次請(qǐng)求時(shí),服務(wù)器在為客戶準(zhǔn)備的頁(yè)面上添加一個(gè)或多個(gè)隱藏表單,把一些要隱藏的信息如標(biāo)識(shí)該客戶的ID號(hào)存儲(chǔ)在那里。當(dāng)客戶提交該表單時(shí),這些信息會(huì)作為查詢(xún)參數(shù)返回服務(wù)器,服務(wù)器可以利用HttpServletRequest對(duì)象的getParameter()方法讀取出來(lái)。這樣就達(dá)到了在服務(wù)器端維護(hù)會(huì)話信息持續(xù)的作用。,5、隱藏窗體技術(shù),2020年9月2日,11,可以這樣認(rèn)為,同重寫(xiě)URL技術(shù)相比,隱藏窗體技術(shù)在表單參數(shù)中傳遞會(huì)話信息,而重寫(xiě)URL技術(shù)是在GET參數(shù)中傳遞會(huì)話信息。除了這點(diǎn),二者并無(wú)根本區(qū)別。,2020年9月2日,12,上面我們分別說(shuō)明了如何使用URL重寫(xiě)、co
7、okie和隱藏表單這三種方式來(lái)跟蹤用戶會(huì)話。不管采用何種方式,都應(yīng)實(shí)現(xiàn)以下步驟: 1、服務(wù)器必須為每個(gè)會(huì)話產(chǎn)生一個(gè)唯一的ID號(hào) 2、在服務(wù)器和客戶瀏覽器之間傳遞這個(gè)ID號(hào)以維持會(huì)話 3、服務(wù)器端根據(jù)ID號(hào)維護(hù)相關(guān)客戶的會(huì)話信息,2020年9月2日,13,Servlet2.3規(guī)范定義了一個(gè)HttpSession接口,允許Servlet容器針對(duì)每一個(gè)用戶建立一個(gè)HTTP會(huì)話(即HttpSession對(duì)象),每個(gè)HTTP會(huì)話將會(huì)自動(dòng)被賦予一個(gè)唯一的會(huì)話編號(hào)(session ID),而無(wú)需程序員編程實(shí)現(xiàn)。 HttpSession對(duì)象提供了和ServletContext對(duì)象相似的一組會(huì)話屬性的方法,這樣
8、就可以很容易地在服務(wù)器端存放用戶會(huì)話狀態(tài)。,6、使用內(nèi)建的Session對(duì)象,2020年9月2日,14,HttpServletRequest對(duì)象提供了getSession方法,通過(guò)這個(gè)方法,Servlet就可以獲得與當(dāng)前請(qǐng)求關(guān)聯(lián)的會(huì)話對(duì)象的引用。該方法為重載的方法,有兩個(gè)版本: public HttpSession getSession();返回與當(dāng)前請(qǐng)求相關(guān)聯(lián)的會(huì)話,如果當(dāng)前請(qǐng)求還沒(méi)有一個(gè)相關(guān)聯(lián)的會(huì)話,就創(chuàng)建一個(gè)并返回。 public HttpSession getSession(bool bCreate);返回與當(dāng)前請(qǐng)求相關(guān)聯(lián)的會(huì)話對(duì)象。如果沒(méi)有,且參數(shù)create的值為true,則創(chuàng)建并
9、返回一個(gè)新的會(huì)話。如果create的值為false,且請(qǐng)求沒(méi)有相關(guān)聯(lián)的會(huì)話對(duì)象,將返回null??梢岳眠@點(diǎn)判斷用戶是否為第一次訪問(wèn)站點(diǎn):如果getSession(false)返回null,則表示用戶是第一次訪問(wèn)站點(diǎn),如果返回非null則表示用戶不是第一次訪問(wèn)站點(diǎn)。,7、會(huì)話與請(qǐng)求的關(guān)系,2020年9月2日,15,獲取與請(qǐng)求關(guān)聯(lián)的會(huì)話對(duì)象 HttpSession s = request.getSession(); String sid = s.getId(); if(s.isNew() out.println(新的會(huì)話ID=+sid+); else out.println(歡迎回來(lái),User:
10、+sid+); ,會(huì)話與請(qǐng)求的關(guān)系,總是返回一個(gè)會(huì)話。但是我們不知道該會(huì)話是新建的還是已有的。,獲得會(huì)話ID并保存到字符串中。該串將類(lèi)似于:32FE24119D28C30866C9EF4BEA40EF4E,判斷會(huì)話是新建的還是舊的。,2020年9月2日,16,會(huì)話ID servlet容器在創(chuàng)建每一個(gè)新的HTTP會(huì)話對(duì)象時(shí),都會(huì)賦予一個(gè)新的ID號(hào)。 servlet容器保證它在Web應(yīng)用范圍內(nèi)是唯一的。 會(huì)話ID是實(shí)際包含在Http請(qǐng)求/響應(yīng)報(bào)文中的會(huì)話數(shù)據(jù)。 這個(gè)ID號(hào)可以通過(guò)HttpSession對(duì)象的getId()獲得。例如: HttpSession session=request.getS
11、ession(); String sessionId=session.getId();,2020年9月2日,17,HttpSession工作原理 當(dāng)用戶第一次發(fā)出請(qǐng)求時(shí),Servlet容器會(huì)建立一個(gè)HttpSession對(duì)象,并自動(dòng)分配一個(gè)Web應(yīng)用范圍內(nèi)唯一的Session ID與之對(duì)應(yīng)。這個(gè)Session ID也會(huì)隨著HTTP響應(yīng)內(nèi)容傳遞給用戶端瀏覽器。傳遞的方式默認(rèn)情況下為cookie,如果用戶端瀏覽器關(guān)閉了cookie功能,就會(huì)使用URL重寫(xiě)技術(shù)傳遞給用戶瀏覽器。 在用戶發(fā)出的后續(xù)請(qǐng)求中,請(qǐng)求信息中會(huì)包含Servelt容器傳遞給它的Session ID。Servlet容器就會(huì)根據(jù)傳回的
12、Session ID將原來(lái)建立的HttpSession對(duì)象將請(qǐng)求與HttpServletRequest對(duì)象關(guān)聯(lián)起來(lái)。所以,對(duì)于同一個(gè)用戶,調(diào)用getSession()方法返回的將是同一個(gè)HttpSession對(duì)象。,會(huì)話與請(qǐng)求的關(guān)系,2020年9月2日,18,與ServletContext對(duì)象類(lèi)似,我們可以給HttpSession對(duì)象綁定屬性。 ServletContext對(duì)象的屬性的作用域是Web應(yīng)用程序,在這個(gè)應(yīng)用程序下的所有Servlet都共享這些屬性; 綁定到HttpSession對(duì)象上的屬性只在一次會(huì)話周期內(nèi)有效,且只有在屬于該會(huì)話的HttpRequest對(duì)象中才可以訪問(wèn)這些屬性。換
13、句話說(shuō),會(huì)話屬性就是特定用戶的專(zhuān)用數(shù)據(jù),同時(shí)訪問(wèn)Web應(yīng)用的其他用戶無(wú)法訪問(wèn)這些屬性。,HttpSession對(duì)象的屬性,2020年9月2日,19,返回由name指定的會(huì)話屬性,如果name指定的屬性不存在將返回null。例如:在同一用戶的會(huì)話有效期內(nèi)的其他地方,我們可以把綁定到HttpSession對(duì)象上的對(duì)象取出來(lái): HttpSession session=request.getSession(true); Account acct=session.getAttribute(account);,刪除由name指定的HttpSession對(duì)象的會(huì)話屬性,如果由name指定的屬性不存在,方法將
14、直接返回。例如: HttpSession session=request.getSession(true); session.removeAttribute(account);,HttpSession接口使用以下方法管理綁定到會(huì)話的屬性 void setAttribute(String name,Object value) Object getAttribute(String name) void removeAttribute(String name),HttpSession接口方法訪問(wèn)屬性,將一個(gè)對(duì)象綁定到HttpSession對(duì)象,使之成為HttpSession對(duì)象的一個(gè)會(huì)話屬性。調(diào)用時(shí)
15、由value指定的對(duì)象將變成其name屬性。如果name屬性已經(jīng)存在,它原來(lái)對(duì)應(yīng)的對(duì)象將由vlaue指定的對(duì)象置換掉。 Account acct=new Account(); HttpSession session=request.getSession(true); session.setAttribute(account,acct); session.setAttribute(account“,new Integer(100);,2020年9月2日,20,如果要終止某個(gè)HTTP會(huì)話,可以使用下面的幾種方式 public void invalidate()方法 public void setM
16、axInactiveInterval(int interval) 方法 在web.xml中配置會(huì)話的生存時(shí)間,HttpSession接口方法終止會(huì)話,調(diào)用該方法將終止某個(gè)HTTP會(huì)話。之后如果嘗試向這個(gè)會(huì)話綁定屬性,將會(huì)得到一個(gè)IllegalStateException異常,例如: HttpSession session=request.getSession(true); session.invalidate(); Account acct=new Account(); session.setAttribute(account,acct); /本句拋出IllegalStateException,設(shè)置HTTP會(huì)話的超時(shí)時(shí)間,單位為秒。例如: HttpSession session=request.getSession(true); sess
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年中共龍門(mén)縣委辦公室公開(kāi)招聘編外人員備考題庫(kù)及一套參考答案詳解
- 2026年十六里河社區(qū)醫(yī)院公開(kāi)招聘合同制工作人員13人備考題庫(kù)及一套答案詳解
- 2026年四川航天川南火工技術(shù)有限公司招聘?jìng)淇碱}庫(kù)及答案詳解1套
- 醫(yī)院信息安全內(nèi)控制度
- 發(fā)改委項(xiàng)目備案內(nèi)控制度
- 資金營(yíng)運(yùn)內(nèi)控制度
- 國(guó)企財(cái)務(wù)管理內(nèi)控制度
- 政府采購(gòu)業(yè)務(wù)內(nèi)控制度
- 醫(yī)護(hù)人員內(nèi)控制度
- 科技創(chuàng)新內(nèi)控制度
- 《醫(yī)療保障基金使用監(jiān)督管理?xiàng)l例》培訓(xùn)課件
- 全國(guó)初中歷史賽課一等獎(jiǎng)歷史七年級(jí)上冊(cè)(人教2024年新編)《秦統(tǒng)一中國(guó)》精美課件
- 《內(nèi)部審核培訓(xùn)》課件
- 設(shè)施設(shè)備維護(hù)保養(yǎng)服務(wù)合同
- 課件-分娩生理
- 北京市西城區(qū)2022-2023學(xué)年六年級(jí)上學(xué)期語(yǔ)文期末試卷(含答案)
- 消防器材檢查記錄表
- (江漢牌)SC系列“貨用”施工升降機(jī)說(shuō)明書(shū)
- AQ/T 2061-2018 金屬非金屬地下礦山防治水安全技術(shù)規(guī)范(正式版)
- DZ∕T 0274-2015 地質(zhì)數(shù)據(jù)庫(kù)建設(shè)規(guī)范的結(jié)構(gòu)與編寫(xiě)(正式版)
- 《化工園區(qū)中試基地建設(shè)導(dǎo)則》
評(píng)論
0/150
提交評(píng)論