EXT JS - 我想知道如何检查会话超时的json响应,如果用户闲置20分钟左右,如果他的会话已经过期
答案 0 :(得分:1)
在ExtJS中没有处理会话超时的标准方法。 ExtJS是一个客户端库,用于创建应用程序的用户界面/前端层,而会话管理则在服务器端进行。
ExtJS Ajax请求实现了一个回调机制。这意味着将某个Javascript函数指定为回调函数,该函数在Ajax请求完成(成功或失败)时调用。以下是从ExtJS API Documentation获取的示例 - 请参阅定义回调函数的参数成功和失败:
// Basic request
Ext.Ajax.request({
url: 'foo.php',
success: someFn,
failure: otherFn,
headers: {
'my-header': 'foo'
},
params: { foo: 'bar' }
});
因此,在会话超时的情况下,您可以(例如)构造一个JSON响应,其中包含一些错误代码(由您定义),以及要向用户显示的错误消息。然后,回调函数应检查是否从服务器返回此错误,并在发生这种情况时采取必要的操作(显示错误消息,重定向到登录页面等)。
请注意,在上述情况下,从ExtJS的角度来看,Ajax请求实际上是成功的。当HTTP请求完全失败时(HTTP错误如403等),Ajax请求被认为是不成功的。这很重要,因为通常可以为成功和不成功的请求定义不同的回调函数(如上面的示例代码所示)。
答案 1 :(得分:1)
你可以模拟超时会话......
var keepaliveHandler = new Ext.util.DelayedTask(function(){
Ext.Ajax.request({
url : '/keepalive',
method : 'GET',
success: function(response, options){
//dummy server call each 60 seconds
keepaliveHandler.delay(60000);
}
});
});
var timeoutHandler = new Ext.util.DelayedTask(function(){
//invalidate session
Ext.Ajax.request({
url : '/logout',
method : 'GET',
success: function(response, options){
Ext.MessageBox.show({
title: MessagesMap.getMessage('session.closed'),
msg: MessagesMap.getMessage('session.closed.message'),
buttons: Ext.MessageBox.OK,
fn: function() {
window.location.pathname = '/';
},
icon: Ext.MessageBox.WARNING
});
}
});
});
if(Ext.ux.SystemProperties.isLogged) {
keepaliveHandler.delay(60000);
timeoutHandler.delay(Ext.ux.SystemProperties.timeout);
//check for mouse movements
document.body.onmousemove = function(e) {
timeoutHandler.delay(Ext.ux.SystemProperties.timeout);
};
}