簡體   English   中英

會話在具有負載均衡器和粘性會話的JBOSS集群環境中無效

[英]Session Invalidated in JBOSS clustered environment with load balancer and sticky session

我們在使用負載均衡器和粘性會話的JBOSS集群環境中部署的Struts應用程序中面臨一個問題

問題說明

1)此問題發生在用戶注冊功能中,該功能有2頁,register1.do和register2.do頁面

2)當用戶點擊注冊網址時, https://ourwebsite.com/register1.do

提出兩個GET請求

GET register1.do(獲取第一個注冊頁面並在會話中設置幾個值)

GET captcha.do(這會加載一個要在register1.do上顯示的驗證碼圖像)

3)有時會發生的事情是對register1.do的GET請求設置一個JSESSIONID cookie和GET請求到captcha.do而不是寫第一個請求設置的JSESSIONID cookie。 這會導致第二個注冊頁面出現問題,因為它會獲取存儲在會話中的一些值,並且當會話被驗證碼覆蓋時,無法獲得任何值。 見下圖

在此輸入圖像描述

4)這種情況不會每次都發生,一旦出現這個問題,如果我們回到register1.do頁面刷新(F5)/硬刷新(Ctrl + F5)那么對captcha.do的GET請求不會過度寫入JSESSIONID cookie用戶注冊工作正常。

此外,這只發生在集群環境中,在單個JBOSS環境中它工作正常。

  • 誰能幫助我找出可能存在的問題?

  • 當我們進行頁面刷新時,為什么會話不會被覆蓋?

將您的apache mod_cluster二進制文件更新為mod_cluster 1.2.6.Final,可在此處獲得

這解決了我,每次刷新后跳過服務器。 希望這會有所幫助。

我也遇到過與jboss eap 6.1相同的問題,在負載均衡器中我會使用mod_cluster配置我將算法從每個會話的服務器更改為每個會話的入口,並且粘性會話運行良好且良好。通過以下內容了解每個條目每個會話的會話和服務器。

每個會話進入意味着只要源IP打開新會話(唯一源端口),設備就會創建其他客戶端表條目。 這使得該單元可以更准確地跟蹤會話數量,但其行為是繼續將所有流量從客戶端的源IP發送到同一服務器。

在“每會話服務器”模式下,設備以相同的方式跟蹤唯一的源端口,但是當客戶端打開新會話時,設備會為新會話做出新的負載平衡決策。 這樣,來自同一客戶端IP的多個會話可以在所有服務器之間“噴塗”,而不是粘在單個服務器上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM