2017-10-10 105 views
0

會話不與mod_jk負載均衡器(來自httpd Web服務器)一起使用。但是,相同的代碼在應用程序服務器上工作正常。Liferay會話mod_jk問題

以下是worker.properties:

worker.list=loadbalancer,status,web 

worker.node0.port=8009 
worker.node0.host=10.50.26.19 
worker.node0.type=ajp13 
worker.node0.lbfactor=1 
worker.node0.socket_keepalive=false 

worker.node0.connect_timeout=10000 
worker.node0.prepost_timeout=10000 
worker.node0.socket_timeout=60 

worker.node0.connection_pool_timeout=600 

worker.loadbalancer.type=lb 
worker.loadbalancer.balance_workers=node0 
worker.loadbalancer.sticky_session=1 

Java代碼的Portlet 1:

PortletSession portletSession = actionRequest.getPortletSession(); 
portletSession.setAttribute("username",reg.getFname(), PortletSession.APPLICATION_SCOPE); 

JSP代碼中的Portlet 2:

PortletSession portletSessionobject = renderRequest.getPortletSession(); 
userName=(String)portletSessionobject.getAttribute("username",PortletSession.APPLICATION_SCOPE); 

在這兩個portlet中的以下屬性已應用於liferay-portlet.xml中

<private-session-attributes>false</private-session-attributes> 

但無法在Web服務器的Portlet 2 JSP頁面中獲取用戶名,它將返回null。但在應用程序服務器中,價值如預期。請建議。

回答

0

經過大量研究發現解決方案。因此張貼它來幫助別人。有兩件事導致這個問題。

i)會話被httpd服務器覆蓋。在httpd.conf中添加了標頭標籤,這實際上導致了問題。刪除它並且JSESSION開始出現。

Header set Set-Cookie HttpOnly;Secure 

ⅱ)會話親和性沒有因的jvmRoute正常工作沒有定義。因此,會話會間歇性終止。所以添加的實例ID爲每個實例的standalone.xml子系統網絡,

對於NODE0,

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="node0" native="false"> 

對於節點1,

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="node1" native="false">