我已经在MVC中实现了一个项目,并且我已经用ajax请求完成了大部分工作。但我们正面临会议暂停的问题。所以我想要一些关于ajax的东西,在做任何ajax请求之前它会检查会话然后处理那个ajax请求。
我不想在我使用ajax的所有页面中写if else条件。
请提出一些建议。
由于 阿图尔
答案 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保持对服务器的请求的视图来保持会话处于活动状态,以便会话保持活动状态。问题是你希望会话能够长久保持活着......