使用Jquery获取会话状态

时间:2012-06-15 08:19:25

标签: jquery spring-mvc

在我的应用程序中,我会通过每隔30秒进行一次Ajax调用来了解会话何时到期,但问题是当我可以使用控制器方法时,HttpSession刷新和lastaccessedtime发生了变化。 那么你有没有想过如何知道会话的状态而不改变它的行为。 我正在使用Jquery和SpringMVC 2.5

@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);
    } 
});

即使使用request.isRequestedSessionIdValid(),每次调用控制器方法时,会话都会刷新。

谢谢

3 个答案:

答案 0 :(得分:2)

从你的例子中,你似乎想要一个json响应:

valid = data.sessionValid;

不是默认 dataType,因此您需要指定

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

答案 1 :(得分:1)

您可以在Javascript中使用计时器来计算会话到期的时间,并使用寄存器ajaxSend处理程序来重置计时器。

答案 2 :(得分:1)

每当您向服务器发出请求时,会更新会话lastAccessedTime。

您可以做的是每次在会话中存储自定义变量的时间戳。然后使用您的ajax,您可以调用控制器的方法来检索存储在对象中的自定义时间戳。我建议你使用AOP方法来生成时间戳。我会少打扰你。

祝你好运!