Websphere Commerce의 세션 상태는 사용자 ActivityToken에 연결된 비즈니스 컨텍스트에 저장됩니다.
세션 상태는 데이터베이스에 직렬화되며 사용자 세션이 클러스터의 다른 서버로 이동하는 경우 사용할 수 있습니다.
<BusinessContext ctxId="MyContext"
factoryClassname="com.ibm.commerce.context.factory.SimpleBusinessContextFactory" >
<parameter name="spiClassname" value="com.myorg.commerce.context.contentimpl.MyContextImpl" />
그런 다음 필요한 :
당신은 WC \ XML \ 설정 \ BusinessContext.xml,과 같이에서 BusinessContext.xml에 새로운 컨텍스트 요소를 등록하여 자신의 세션 상태를 추가 할 수 있습니다 당신의 상황이
<!-- web site store front configuration -->
<InitialBusinessContextSet ctxSetId="Store" >
...
<InitialBusinessContext ctxId="MyContext" createOrder="0" />
컨텍스트는 다른 컨텍스트와 함께 생성됩니다
에 존재하며, 어느 CTXDATA 다에 연재 될 세션의 종류를 알 수 있습니다 tabase 테이블 (알려진 사용자의 경우) 및 익명 사용자의 브라우저 쿠키
의 모양은 귀하의 상황에 맞는 클래스 :
인터페이스 클래스 com.myorg.commerce.context.mycontextimpl.MyContext
public abstract interface MyContext extends Context
{
public static final String CONTEXT_NAME = "com.myorg.commerce.context.mycontextimpl.MyContext";
public abstract String getSomeValue();
public abstract void setSomeValue(String v);
}
그리고 구현 공용 클래스 MyContextImpl이 AbstractContextImpl에게 구현을 확장 MyContext { }
새 값을 설정 한 후 "this.setDirty (true)"를 사용하여 chang 지속성을위한 것.
또한 직렬화해야하는 컨텍스트의 값을 반환하려면 getContextAttributes를 오버라이드하고 값을 다시 설정하려면 setContextAttributes를 대체해야합니다.
핵심은 단순히 값을 저장하는 것 이상의 의미를 갖는다는 점입니다. 사용자가 사이트와 상호 작용하는 모든면에서 유효해야하는 불변 조건을 문맥에 넣습니다. 가장 좋은 예로 EntItlementContext가 있습니다. EntitlementContext는 구입하려는 계약을 보유하고 있으며 계산하기가 다소 복잡 할 수 있습니다.
어쨌든, 당신이 사용하는 거라고 명령에서 컨텍스트에 액세스 할 수
this.getCommandContext().getContext(MyContext.CONTEXT_NAME);
그리고 당신은로 사용할 수 있습니다
if (request.getAttribute("myContext") == null) {
request.setAttribute("myContext", ((CommandContext) request.getAttribute("CommandContext")).getContext(MyContext.CONTEXT_NAME));
}
한 후 JSP에서
$ {myContext.someValue}
페이지 상단에 <% @ page session = "true"%> 문이 있습니까? – DanielBarbarian
프로덕션 배포가 클러스터되어 있습니까? 그렇다면 세션 선호도가 켜져 있습니까? –