在每个Jquery Ajax命中之前检查Session

时间:2011-12-30 13:00:08

标签: jquery asp.net-ajax

我已经在MVC中实现了一个项目,并且我已经用ajax请求完成了大部分工作。但我们正面临会议暂停的问题。所以我想要一些关于ajax的东西,在做任何ajax请求之前它会检查会话然后处理那个ajax请求。

我不想在我使用ajax的所有页面中写if else条件。

请提出一些建议。

由于 阿图尔

5 个答案:

答案 0 :(得分:1)

也许你应该检查jQuery.ajaxPrefilter()(http://api.jquery.com/jQuery.ajaxPrefilter/)。您也无法修改有关空闲超时的应用程序池设置以避免会话超时吗?

答案 1 :(得分:1)

我今天已经解决了这个问题,这是我的解决方案:

这个php部分(文件或控制器方法)将由ajax调用:

// create your preferred way of returning a json object like { "isLogged": true }
echo json_encode(array('isLogged' => checkSession()));

现在,将此脚本放在所有具有ajax调用的页面的开头,并要求用户进行记录:

$(document).ajaxSend(function(e, xhr) {
    $.ajax({
        url: 'checkSession.php',
        type: 'GET',
        global: false,
        success: function(session) {
            if(!session.isLogged) {
                xhr.abort();

                // This allows my framework to take care of the redirect
                // and to remember the intended page,
                // so it redirects back here after login:
                location.reload();

                // use this one to redirect directly to the login page:
                // window.location.replace('login.php');
            }
        },
        dataType: 'json'
    });
});

此处global: false部分必不可少,以防止此ajax调用进入ajaxSend,从而创建无限循环。

答案 2 :(得分:0)

我在一个项目中完成它的一种方法是实现一个保持活动的ajax请求,该请求会在一定时间间隔内在后台发送......所以你的会话不会超时......

也许不是一种非常优雅的方式,但它有效:)

答案 3 :(得分:0)

我遇到了与jQuery-ajax,spring mvc和spring security架构相同的问题。

我遵循的解决方案如下。

如果发生会话超时,spring security会将请求重定向到登录表单控制器。

在登录控制器中检查请求(保存请求)是否是ajax请求(标题x-requested-with的呈现),如果是ajax请求,则返回指示超时的json / xml值。例如:{"session-timeout" : true}

然后使用全局jQuery ajax事件(如ajaxSuccess / ajaxError)测试此ajax返回值,以查看是否存在会话超时并执行您想要采取的操作。

你可以尝试使用你正在使用的应用程序框架。

答案 4 :(得分:0)

您可以创建global filter;全局过滤器会影响每个控制器操作,可以检查会话是否存在,然后重定向到登录页面或按照相应的方式执行操作。此外,您可以通过创建一个使用AJAX或iframe保持对服务器的请求的视图来保持会话处于活动状态,以便会话保持活动状态。问题是你希望会话能够长久保持活着......