2017-12-19 27 views
0

내 응용 프로그램에 IE 11을 사용하고 있습니다. 나는 여기서 세션 문제에 직면 해있다.Java IE가 이전 HTTP 서블릿 세션 객체를 제공합니다.

처음 트랜잭션을 수행 할 때 트랜잭션 응답 JSP 페이지에서 현재 트랜잭션이 1000이 아닙니다. [(TransactionDO) session.getAttribute ("txnDetails");]. 동일한 JSP에서 ng-init = "GetTxnResponse()"를 div에서 js 함수에서 트랜잭션 번호를 1000으로 얻습니다.

그런 다음 트랜잭션 응답 JSP 페이지에서 로그 아웃하지 않고 동일한 세션에서 두 번째 트랜잭션을 수행하고 있습니다. 나는 현재 세션을 HTTP 세션에서 1001로 얻는다. ng-init = "GetTxnResponse()"와 같은 jsp에서 js는 트랜잭션을 1001 대신 1000으로 얻습니다.

IE에서만 발생합니다. 해결 하시길 바랍니다. 아래는 참조 용 코드입니다.

<fmt:setLocale value='en_US' /> 
<% 
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 
// HTTP 1.1. 
response.setHeader("Pragma","no-cache"); //HTTP 1.0 
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server 

TransactionDO txnDO = (TransactionDO) session.getAttribute("txnDetails"); 
System.out.println("Txn no : "+txnDO.txnNo()); // Here i get 1001 second time 

%> 

<fmt:bundle basename="applicationresources"> 
    <div ng-controller="txnController" 
     ng-init="GetTxnResponse()" > 
     --- 
     --- 
    </div> 
</fmt:bundle> 

- -

- JSP 코드 JS 코드 -

self.GetTxnResponse = function() { 
    if (txnStatus == '00') { 
     $http.get(CONTEXT_PATH + '/getResponseDetails').success(function(data) { 
     // Here i get 1000 from data second time 
     } 
    } 

- 자바 코드 -

@RequestMapping(value="/getResponseDetails", method=RequestMethod.GET) 
    public @ResponseBody TransactionDO getResponseDetails(HttpServletRequest httpRequest){ 
    TransactionDO txnDO = null; 
     txnDO = (TransactionDO) httpRequest.getSession().getAttribute("txnDetails");   
     return txnDO; 
    } 

답변

1

페이지 을 확인합니다. 그것은 견고한 실천입니다. 또한 프로덕션 사이트에서 캐싱을 허용합니다.

<div ng-controller="txnController" 
    ng-init="GetTxnResponse(${txnDetails.txnNo})" > 

self.GetTxnResponse = function(txnNo) { 
    if (txnStatus == '00') { 
     $http.get(CONTEXT_PATH + '/getResponseDetails/' + txnNo).success(function(data) { 
     // Here i get 1000 from data second time 

@RequestMapping(value="/getResponseDetails/{txnNo}", method=RequestMethod.GET) 
public @ResponseBody TransactionDO getResponseDetails(HttpServletRequest httpRequest, 
     @PathVariable long txnNo) { 
    ... 
} 

표시된 코드보다 조금 더 페이지를 수정해야합니다.

더 자세히 설명하면 사용자는 동일한 페이지에서 두 개의 탭을 연 다음 재생할 수 있습니다. 맞춰봐?

+0

감사합니다. 하지만 txnDetails 객체에서 많은 필드가 필요합니다. 그게 왜 getAttribute ("txnDetails") 개체로 점점,하지만 IE는 이전 세션 개체를 제공합니다. – DEADEND

+0

내 대답은 세션의 트랜잭션에 대한 트랜잭션 ID 맵을 갖고 트랜잭션 ID로 요청을 수행하는 것입니다. 그렇다면 혼란은 일어나지 않을 것입니다. BTW 빠른 IE 수정 프로그램은 아마 요청 URL''t = "+ System.currenMillis()'에 추가하는 것입니다. –

+0

고맙습니다. 그것을 밖으로 시도하자. – DEADEND