溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用HTTP會(huì)話

發(fā)布時(shí)間:2021-11-03 17:43:58 來源:億速云 閱讀:91 作者:小新 欄目:編程語言

這篇文章主要介紹如何使用HTTP會(huì)話,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

最佳實(shí)踐: 請(qǐng)瀏覽有關(guān)實(shí)現(xiàn) HTTP 會(huì)話的建議。

  • 為保護(hù) HTTP 會(huì)話啟用安全性集成

    HTTP 會(huì)話由會(huì)話標(biāo)識(shí)來識(shí)別。會(huì)話標(biāo)識(shí)是在運(yùn)行時(shí)生成的一個(gè)偽隨機(jī)數(shù)。會(huì)話 hijacking 是一個(gè)已知攻擊 HTTP 會(huì)話,當(dāng)通過網(wǎng)絡(luò)的所有請(qǐng)求被強(qiáng)制通過安全連接(意味著 HTTPS)時(shí)它可被阻止。但并不是每個(gè)客戶環(huán)境中的配置都強(qiáng)制此約束,這是因?yàn)?SSL 連接的性能影響。由于這個(gè)緩和方式,HTTP 會(huì)話易受 hijacking 的攻擊,并且因?yàn)檫@個(gè)弱點(diǎn) WebSphere Application Server 有一個(gè)選項(xiàng)以緊密結(jié)合 HTTP 會(huì)話和 WebSphere Application Server 安全性。在 WebSphere Application Server 中啟用安全性,以使會(huì)話以僅允許創(chuàng)建這些會(huì)話的用戶訪問它們的方式來進(jìn)行保護(hù)。

  • 完成后使用 javax.servlet.http.HttpSession.invalidate() 釋放 HttpSession 對(duì)象。

    HttpSession 對(duì)象在 Web 容器中存活到:


    1. 應(yīng)用程序使用 javax.servlet.http.HttpSession.invalidate 方法明確地、程序化地釋放它;頻繁、程序化的無效是應(yīng)用程序注銷功能的一部分。

    2. HttpSession 到期時(shí)(缺省 = 1800 秒或 30 分鐘),WebSphere Application Server 銷毀已分配的 HttpSession?;跁?huì)話管理設(shè)置,WebSphere Application Server 在內(nèi)存中僅可以維持一定數(shù)量的 HTTP 會(huì)話。在分布式會(huì)話的情況下,當(dāng)內(nèi)存中達(dá)到最大高速緩存限制時(shí),會(huì)話管理工具把最近最少使用(LRU)的一個(gè)會(huì)話從高速緩存中除去,為會(huì)話騰出空間。

  • 避免嘗試保存和重新使用每個(gè) servlet 或 JSP 文件外的 HttpSession 對(duì)象。

    HttpSession 對(duì)象是 HttpRequest(您可以僅通過 req.getSession 方法獲取它)的功能,其副本僅在 servlet 或 JSP 文件的 service 方法的生存期有效。您無法高速緩存 HttpSession 對(duì)象和在 servlet 或 JSP 文件的范圍外引用它。

  • 當(dāng)開發(fā)要在 HTTP 會(huì)話中存儲(chǔ)的新對(duì)象時(shí),實(shí)現(xiàn) java.io.Serializable 接口。
    類的可串行性由實(shí)現(xiàn) java.io.Serializable 接口的類啟用。實(shí)現(xiàn) ava.io.Serializable 接口允許在使用分布式會(huì)話時(shí)正確序列化對(duì)象。未實(shí)現(xiàn)此接口的類不會(huì)將它們的狀態(tài)序列化或取消序列化。因此,如果類未實(shí)現(xiàn) Serializable 接口,則 JVM 無法將該類的狀態(tài)保持到數(shù)據(jù)庫或另一個(gè) JVM 中??尚蛄谢惖乃凶宇愋投际强尚蛄谢?。示例如下:

    [object Object][object Object]



    確保未標(biāo)記為瞬態(tài)的所有實(shí)例變量對(duì)象是可序列化的。不能高速緩存不可序列化的對(duì)象。

    為了符合 Java Servlet 規(guī)范,當(dāng)分布式 servlet 容器無法支持遷移存儲(chǔ)對(duì)象的會(huì)話所需要的機(jī)制時(shí),該容器必須為這些對(duì)象創(chuàng)建 IllegalArgumentException。僅當(dāng)選擇了 distributable 時(shí)才會(huì)創(chuàng)建異常。

  • HTTPSession API 不發(fā)布會(huì)話的事務(wù)行為。

    分布式 HTTPSession 支持不保證在故障轉(zhuǎn)移方案中或會(huì)話親緣關(guān)系中斷時(shí)屬性的事務(wù)完整性。使用事務(wù)感知的資源(象 Enterprise Java Beans)來保證應(yīng)用程序所要求的事務(wù)完整性。

  • 確保您添加到會(huì)話的 Java 對(duì)象在正確的類路徑中。
    如果您把 Java 對(duì)象添加到會(huì)話,則把那些對(duì)象的類文件放入正確的類路徑中(如果在企業(yè)應(yīng)用程序中利用跨 Web 模塊的共享,則使用應(yīng)用程序類路徑,或者如果使用 Servlet 2.2 兼容的會(huì)話共享,則使用 Web 模塊類路徑)或者放入包括在 WebSphere Application Server 中使用的其他 servlet 的目錄下。在會(huì)話集群的情況下,此操作應(yīng)用到此集群中的每個(gè)節(jié)點(diǎn)。

    由于 HttpSession 對(duì)象在用戶可能訪問的 servlet 之間是共享的,所以考慮采用站點(diǎn)范圍的命名約定,以避免沖突。

  • 避免在 HttpSession 對(duì)象中存儲(chǔ)大對(duì)象圖。

    在大多數(shù)應(yīng)用程序中,每個(gè) servlet 只需要全部會(huì)話數(shù)據(jù)的一小部分。然而,通過將數(shù)據(jù)作為一個(gè)大對(duì)象存儲(chǔ)在 HttpSession 對(duì)象中,應(yīng)用程序迫使 WebSphere Application Server 每次都處理所有數(shù)據(jù)。

  • 利用會(huì)話親緣關(guān)系幫助您獲取在 WebSphere Application Server 中的較高的高速緩存命中率。

    WebSphere Application Server 具有幫助會(huì)話親緣關(guān)系的 HTTP Server 插件中的功能性。插件會(huì)從瀏覽器中讀取 cookie 數(shù)據(jù)(或已編碼的 URL),并且?guī)椭颜?qǐng)求導(dǎo)向到適當(dāng)?shù)膽?yīng)用程序或克隆(基于已指定的會(huì)話密鑰)。此功能增加了內(nèi)存中的高速緩存的使用,并且減少對(duì)數(shù)據(jù)庫或另一個(gè) WebSphere Application Server 實(shí)例的命中。

  • 會(huì)話親緣關(guān)系的最大化使用和避免中斷親緣關(guān)系。

    正確使用會(huì)話親緣關(guān)系可以增強(qiáng) WebSphere Application Server 的性能。WebSphere Application Server 環(huán)境中的會(huì)話親緣關(guān)系是一種最大化地使用會(huì)話對(duì)象的內(nèi)存中高速緩存,并減少讀數(shù)據(jù)庫或另一個(gè) WebSphere Application Server 實(shí)例數(shù)的方法。會(huì)話親緣關(guān)系通過高速緩存應(yīng)用程序(用戶正在與其進(jìn)行交互)的服務(wù)器實(shí)例中的會(huì)話對(duì)象進(jìn)行工作。如果應(yīng)用程序部署在服務(wù)器組的多臺(tái)服務(wù)器中,則應(yīng)用程序可以把用戶導(dǎo)向到其中任何一臺(tái)服務(wù)器。如果用戶在 server1 開始, 然后過一會(huì)進(jìn)入到 server2,則服務(wù)器必須把所有會(huì)話信息寫到外部位置,以便服務(wù)器實(shí)例(server2 正在其中運(yùn)行)可以讀取該數(shù)據(jù)庫??梢允褂脮?huì)話親緣關(guān)系避免數(shù)據(jù)庫讀。使用會(huì)話親緣關(guān)系,用戶將為第一個(gè)請(qǐng)求在 server1 上啟動(dòng);然后,對(duì)于每個(gè)后續(xù)的請(qǐng)求,用戶將被導(dǎo)向回 server1。Server1 必須僅查看高速緩存以獲取會(huì)話信息;server1 從不需要調(diào)用會(huì)話數(shù)據(jù)庫以獲取該信息。

    您可以通過不中斷會(huì)話親緣關(guān)系改進(jìn)性能。幫助您避免中斷會(huì)話親緣關(guān)系的一些建議是:


    1. 如果可能,把所有 Web 應(yīng)用程序組合到單應(yīng)用程序服務(wù)器實(shí)例,并使用模型或克隆來提供故障轉(zhuǎn)移支持。

    2. 使用多框架 JSP 文件時(shí),為框架頁面創(chuàng)建會(huì)話,但是不為框架中的頁面創(chuàng)建會(huì)話。(請(qǐng)參閱此主題中的后續(xù)討論。)

  • 使用多框架頁面時(shí),遵循以下準(zhǔn)則:


    1. 僅在一個(gè)框架中或訪問任何框架集之前創(chuàng)建會(huì)話。例如,假設(shè)不存在已與瀏覽器相關(guān)聯(lián)的會(huì)話,并且用戶訪問多框架 JSP 文件,瀏覽器發(fā)出 JSP 文件的并發(fā)請(qǐng)求。因?yàn)檎?qǐng)求不是任何會(huì)話的部分,因此 JSP 文件結(jié)束創(chuàng)建多個(gè)會(huì)話,并且所有 cookie 都發(fā)回到該瀏覽器。該瀏覽器僅執(zhí)行到達(dá)的最后 cookie。因此,僅客戶機(jī)可以檢索與最后一個(gè) cookie 相關(guān)聯(lián)的會(huì)話。建議您在訪問利用 JSP 文件的多框架頁面前創(chuàng)建會(huì)話。

    2. 缺省情況下,JSP 文件使用 request.getSession(true) 方法獲取 HTTPSession。因此缺省情況下,如果不存在用于客戶機(jī)的會(huì)話,則 JSP 文件會(huì)創(chuàng)建新會(huì)話。瀏覽器中的每個(gè) JSP 頁面正在請(qǐng)求一個(gè)新會(huì)話,但是,只有一個(gè)會(huì)話用于每個(gè)瀏覽器實(shí)例。開發(fā)者可以使用

      <% page="" session="false"> 關(guān)閉不訪問此會(huì)話的 JSP 文件中的自動(dòng)會(huì)話創(chuàng)建。接著,如果頁面需要訪問該會(huì)話信息,開發(fā)者可以使用 <%httpsession session="javax.servlet.http.HttpServletRequest.getSession(false);"> 以獲取由原始會(huì)話創(chuàng)建 JSP 文件所創(chuàng)建的已存在的會(huì)話。此操作幫助您防止中斷框架頁面的初始裝入上的會(huì)話親緣關(guān)系。

    3. 僅使用一個(gè)框架更新會(huì)話數(shù)據(jù)。使用框架集時(shí),請(qǐng)求并發(fā)地進(jìn)入 HTTP 服務(wù)器。僅在一個(gè)框架中修改會(huì)話數(shù)據(jù),以便會(huì)話更改不被所建議的并發(fā)框架集中的會(huì)話更改覆蓋。

    4. 避免使用多框架 JSP 文件,其中框架指向不同的 Web 應(yīng)用程序。此操作導(dǎo)致丟失另一個(gè) Web 應(yīng)用程序創(chuàng)建的會(huì)話,因?yàn)閬碜缘谝粋€(gè) Web 應(yīng)用程序的 JSESSIONID cookie 是由第二個(gè) Web 應(yīng)用程序創(chuàng)建的 JSESSIONID 所覆蓋。

  • 當(dāng)把安全性應(yīng)用到 servlet 或 JSP 文件(使用帶有啟用的安全性集成的會(huì)話)時(shí),保護(hù)所有頁面(不只是某些頁面)。

    當(dāng)它應(yīng)用到安全性和會(huì)話時(shí),它保護(hù)所有頁面或什么也不保護(hù)。因此,對(duì)于部分時(shí)間要保護(hù)會(huì)話狀態(tài)的訪問來說它是沒有意義的。當(dāng)在會(huì)話管理工具中啟用安全性集成時(shí),創(chuàng)建或訪問會(huì)話的所有資源必須是受保護(hù)的或未受保護(hù)的。您不能混合受保護(hù)的和未受保護(hù)的資源。

    僅保護(hù)幾個(gè)頁面的問題是,在受保護(hù)的頁面中創(chuàng)建的會(huì)話是用已認(rèn)證用戶的標(biāo)識(shí)創(chuàng)建的。僅同一用戶能夠訪問其他受保護(hù)的頁面中的會(huì)話。要保護(hù)這些會(huì)話不被未授權(quán)的用戶使用,不能從未受保護(hù)的頁面訪問它們。當(dāng)發(fā)生來自未受保護(hù)的頁面的請(qǐng)求時(shí),拒絕訪問并且創(chuàng)建 UnauthorizedSessionRequestException 錯(cuò)誤。(UnauthorizedSessionRequestException 是運(yùn)行時(shí)異常;它是為您記錄的。)

  • 使用手工更新和 sync() 方法或基于時(shí)間的寫應(yīng)用程序(讀取會(huì)話數(shù)據(jù)),但更新很少。

    寫頻率時(shí)使用 END_OF_SERVICE,當(dāng)應(yīng)用程序使用會(huì)話并且任何時(shí)候數(shù)據(jù)從該會(huì)話讀出或?qū)懭霑r(shí),LastAccess 時(shí)間字段會(huì)更新。如果使用數(shù)據(jù)庫會(huì)話,則產(chǎn)生對(duì)數(shù)據(jù)庫的新的寫。此活動(dòng)是性能命中,僅當(dāng)數(shù)據(jù)值更新時(shí)(不是每個(gè)記錄的讀或?qū)懀?,您可以避免使用“手工更新”選項(xiàng)并且使記錄寫回?cái)?shù)據(jù)庫。

    要使用手工更新,請(qǐng)?jiān)跁?huì)話管理服務(wù)中打開它。另外,應(yīng)用程序代碼必須使用 com.ibm.websphere.servlet.session.IBMSession 類來代替一般的 HttpSession。在 IBMSession 對(duì)象中,存在 sync 方法。此方法告訴 WebSphere Application Server 把會(huì)話對(duì)象中的數(shù)據(jù)寫到數(shù)據(jù)庫。此活動(dòng)幫助開發(fā)者通過僅在必要時(shí)存留會(huì)話信息來提高整個(gè)性能。


    注: 使用手工更新的替代方法是利用時(shí)間更新以在不同的時(shí)間間隔中保持?jǐn)?shù)據(jù)。此操作提供類似手工更新方案的結(jié)果。

  • 實(shí)現(xiàn)以下各建議以達(dá)到高性能:


    1. 如果應(yīng)用程序不頻繁更改會(huì)話數(shù)據(jù),則使用手工更新和 sync 函數(shù)(或定時(shí)更新)有效地存留會(huì)話信息。

    2. 盡可能小地保持會(huì)話中存儲(chǔ)的數(shù)據(jù)量。簡單地使用會(huì)話來保持?jǐn)?shù)據(jù),因?yàn)橛袝r(shí)在會(huì)話對(duì)象中會(huì)存儲(chǔ)太多的數(shù)據(jù)。確定數(shù)據(jù)存儲(chǔ)和性能之間的正確平衡以有效地使用會(huì)話。

    3. 如果使用數(shù)據(jù)庫會(huì)話,則為會(huì)話數(shù)據(jù)庫使用專用數(shù)據(jù)庫。避免使用應(yīng)用程序數(shù)據(jù)庫。這能夠幫助您避免爭用 JDBC 連接并允許使用更好的數(shù)據(jù)庫性能。

    4. 如果使用內(nèi)存到內(nèi)存會(huì)話,則將分區(qū)(組或單個(gè)副本)作為您的集群使用會(huì)增加大小并縮小減少。

    5. 驗(yàn)證您是否具有 WebSphere Application Server 的最新修訂包。

  • 利用以下各工具幫助監(jiān)視會(huì)話性能。


    1. 運(yùn)行 com.ibm.servlet.personalization.sessiontracking.IBMTrackerDebug servlet。- 要運(yùn)行此 servlet,必須運(yùn)行要在 Web 應(yīng)用程序中運(yùn)行的 servlet 調(diào)用程序。或者,您可以明確地在要運(yùn)行的應(yīng)用程序中配置此 servlet。

    2. 使用與 WebSphere Application Server 一起提供的 WebSphere Application Server 資源分析器,監(jiān)視 WebSphere Application Server 環(huán)境的活動(dòng)會(huì)話和統(tǒng)計(jì)信息。

    3. 使用數(shù)據(jù)庫跟蹤工具,如 DB2 中的“Monitoring”。

以上是“如何使用HTTP會(huì)話”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI