2017-10-10 14 views
0

세션이 mod_jk로드 밸런서 (httpd 웹 서버)에서 작동하지 않습니다. 그러나 응용 프로그램 서버에서 동일한 코드가 제대로 작동합니다.Liferay 세션 mod_jk 문제

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 

자바 코드를 포틀릿 1 : 다음과 같은 특성 포틀릿 모두에서

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

:

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

JSP 코드 포틀릿 2

다음은 worker.properties입니다 liferay-portlet.xml에 적용되었습니다.

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

웹 서버의 포틀릿 2 JSP 페이지에서 사용자 이름을 가져올 수 없으면 null을 반환합니다. 그러나 응용 프로그램 서버에서 값은 예상대로오고 있습니다. 제발 제안 해주세요.

답변

0

많은 연구를 한 후 해결책을 찾았습니다. 그러므로 다른 사람들을 돕기 위해 그것을 게시하십시오. 문제의 원인에는 두 가지가 있습니다.

i) 세션이 httpd 서버에 의해 덮어 쓰기되었습니다. 다음 헤더 태그가 실제로 문제를 일으킨 httpd.conf에 추가되었습니다. 그것을 제거하고 JSESSION이 나타나기 시작했습니다.

Header set Set-Cookie HttpOnly;Secure 

ii) jvmRoute가 정의되지 않았기 때문에 세션 선호도가 제대로 작동하지 않았습니다. 결과적으로 세션은 간헐적으로 종료됩니다. 그래서 각 인스턴스의 standalone.xml에서 하위 웹에 대한 인스턴스 ID, node0를 들어

, 노드 1의 경우

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

을 추가

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