會(huì)話跟蹤

HTTP是“無(wú)狀態(tài)”協(xié)議:客戶程序每次讀取Web頁(yè)面,都打開(kāi)到Web服務(wù)器的單獨(dú)的連接,并且,服務(wù)器也不自動(dòng)維護(hù)客戶的上下文信息。即使那些支持持續(xù)性(繼續(xù)使用)HTTP連接的服務(wù)器,盡管多個(gè)客戶請(qǐng)求連續(xù)發(fā)生且間隔很短時(shí)它們會(huì)保持socket打開(kāi),但是,它們也沒(méi)有維持上下文信息的內(nèi)建支持。


1. cookie

使用cookie存儲(chǔ)會(huì)話的ID,在后續(xù)的連接中,取出當(dāng)前的會(huì)話ID,并使用這個(gè)ID從服務(wù)器上的查找表(lookup table)中提取出會(huì)話的相關(guān)信息。

兩個(gè)表:將會(huì)話ID與用戶關(guān)聯(lián)起來(lái)的表、存儲(chǔ)用戶具體數(shù)據(jù)的表

使用cookie處理會(huì)話

然后,在接下來(lái)的請(qǐng)求中,服務(wù)器可以使用globalTable散列表,將來(lái)自JSESSIONID cookie中的會(huì)話ID與sessionInfo散列表中的用戶具體數(shù)據(jù)關(guān)聯(lián)起來(lái)。


2. URL重寫

采用這種方式時(shí),客戶程序在每個(gè)URL的尾部添加一些額外數(shù)據(jù)。這些數(shù)據(jù)標(biāo)識(shí)當(dāng)前的會(huì)話,服務(wù)器將這個(gè)標(biāo)識(shí)符與它存儲(chǔ)的用戶相關(guān)數(shù)據(jù)關(guān)聯(lián)起來(lái)。

即使瀏覽器不支持cookie或在用戶禁用cookie的情況下,URL重寫也能夠工作。

但是,URL重寫具有cookie所具有的同樣缺點(diǎn),也就是說(shuō),服務(wù)器端程序要做許多簡(jiǎn)單但是冗長(zhǎng)乏味的處理任務(wù)。

每個(gè)引用你的站點(diǎn)的URL,以及那些返回給用戶的URL(即使通過(guò)間接手段,比如服務(wù)器重定向中的Location字段)都要添加額外的信息。這種限制意味著,在你的站點(diǎn)上不能有任何靜態(tài)HTML頁(yè)面(至少靜態(tài)頁(yè)面中不能有任何鏈接到站點(diǎn)動(dòng)態(tài)頁(yè)面的鏈接)。因此,每個(gè)頁(yè)面都必須使用Servlet或JSP動(dòng)態(tài)生成。即使所有的頁(yè)面都動(dòng)態(tài)生成,如果用戶離開(kāi)了會(huì)話并通過(guò)書(shū)簽或鏈接再次回來(lái),會(huì)話的信息也會(huì)丟失,因?yàn)榇鎯?chǔ)下來(lái)的鏈接含有錯(cuò)誤的標(biāo)識(shí)信息。


3. 隱藏的表單域

<input type="hidden" name="session" value="a1234">

這個(gè)隱藏域可以用來(lái)存儲(chǔ)有關(guān)會(huì)話的信息,但它的主要缺點(diǎn)是:僅當(dāng)每個(gè)頁(yè)面都是由表單提交而動(dòng)態(tài)生成時(shí),才能使用這種方法。

單擊常規(guī)的(<a href...>)超文本鏈接并不產(chǎn)生表單提交,因此隱藏的表單域不能支持通常的會(huì)話跟蹤,只能用于一系列特定的操作中。


4. Servlet中的會(huì)話跟蹤

Servlet提供一種出色的會(huì)話跟蹤解決方案:HttpSession API。這個(gè)高層接口構(gòu)筑在cookie或URL重寫之上。所有的服務(wù)器都需要支持使用cookie的會(huì)話跟蹤,大多數(shù)服務(wù)器提供一項(xiàng)設(shè)置,可以全局地切換到URL重寫。


(完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,791評(píng)論 11 349
  • 會(huì)話跟蹤是一種靈活、輕便的機(jī)制,它使Web上的狀態(tài)編程變?yōu)榭赡?。HTTP是一種無(wú)狀態(tài)協(xié)議,每當(dāng)用戶發(fā)出請(qǐng)求時(shí),服務(wù)...
    rollAway閱讀 760評(píng)論 0 1
  • 昨晚的鼻子癢,最終是靠茶樹(shù)精油終結(jié)的,剛抹上有些刺痛,但也比癢舒服,刺痛過(guò)后,所有不適就暫告一段落了。今早起床,每...
    misang閱讀 205評(píng)論 1 6

友情鏈接更多精彩內(nèi)容