2012-06-15 3 views
0

내 응용 프로그램에서는 30 초마다 Ajax 호출을 통해 세션이 만료되었을 때 알지만, 컨트롤러 메소드를 사용할 수있을 때 HttpSession을 새로 고치고 lastaccessedtime을 변경하면 문제가 발생합니다. 세션의 상태를 변경하지 않고 세션의 상태를 알 수있는 방법을 알려주십시오. 내가, 심지어 request.isRequestedSessionIdValid()으로 매번 내가 전화 컨트롤러 방법을 JQuery와 및 SpringMVC 2.5Jquery로 세션 상태 가져 오기

@RequestMapping(value = "/consultForm.htm", params = "verifySession", method = RequestMethod.GET) 
public ModelAndView verifySessionStatus(WebRequest webRequest, Model model, HttpServletRequest request, HttpServletResponse response) { 
    boolean isValid = true; 
    HttpSession session = request.getSession(false); 
    if (session.getAttribute("user") == null) { 
     isValid = false; 
    } 
    ModelAndView modelAndView = new ModelAndView("jsonView"); 
    model.addAttribute("sessionValid", isValid); 
    modelAndView.addObject(model); 
    return modelAndView; 
} 


$.ajax({ 
    url : "search.htm?verifySession=1", 
    type : "GET", 
    async : false, 
    cache : false, 
    success : function(data) { 

     valid = data.sessionValid; 
     if (!valid) { 
      showPopinExpire = true; 
      $("#dialog-session-expired").dialog("open"); 
     } 
    }, 
    error:function (xhr, ajaxOptions, thrownError){ 
     alert(xhr.status); 
     alert(thrownError); 
    } 
}); 

을 사용하고, 세션이 새로 고친.

감사합니다

답변

2

, 당신이 당신이하고있는 같은 JSON 응답 할 것 : 당신이를 지정 필요하므로, 그것은 기본dataType하지

valid = data.sessionValid; 

을 그 :

$.ajax({ 
    url : "search.htm?verifySession=1", 
    type : "GET", 
    async : false, 
    cache : false, 
    dataType: 'json' // added this 
    // your rest of the code 
+0

문제는 내 컨트롤러에서 세션을 가져올 때 새로 고침되고 lastaccessedtime이 업데이트되었습니다. 그것을 지킬 생각이 있습니까? – Mohamed

+0

컨트롤러에서 세션을 호출하면 lastAccessedTime이 변경됩니다. 내가 아약스 전화를 할 때 그것을 지킬 방법이 있습니까? 감사 – Mohamed

1

당신은 세션이 만료 할 시간을 계산하고, 타이머를 재설정 ajaxSend 핸들러를 등록해야하는 자바 스크립트에서 타이머를 사용할 수 있습니다. 귀하의 예제에서

+0

컨트롤러에서 세션을 호출하면 lastAccessedTime이 변경됩니다. 내가 아약스 전화를 할 때 그것을 지킬 방법이 있습니까? 고마워 – Mohamed

+0

@ 모하메드 PHP에서 아약스로 스크립트를 호출 할 때마다 세션 타이머 세트가 재설정됩니다. 예를 들어 세션이 만료되기를 원하지 않으면 interval에 ajax 요청을 호출 할 수 있습니다. – jcubic

1

서버에 요청할 때마다 세션 lastAccessedTime이 업데이트됩니다.

할 수있는 작업은 사용자가 원하는 때마다 세션에 사용자 정의 변수의 타임 스탬프를 저장하는 것입니다. 그런 다음 아약스를 사용하여 컨트롤러의 메서드를 호출하여 개체에 저장되어있는 해당 사용자 지정 타임 스탬프를 가져올 수 있습니다. 타임 스탬프를 생성하려면 AOP 메서드를 사용하는 것이 좋습니다. 나는 덜 관입이 될 것이다.

행운을 빈다.