【问题标题】:EXT JS Session TimeoutEXT JS 会话超时
【发布时间】:2011-04-11 17:28:07
【问题描述】:

EXT JS - 我想知道如何检查会话超时的 json 响应,例如用户是否空闲了 20 分钟左右,如果他的会话已过期

【问题讨论】:

  • ExtJS 与会话管理没有太大关系。它是一个用于构建应用程序前端的客户端库。会话管理发生在服务器端,使用 ExtJS 作为前端并没有太大的区别。
  • 所以你的意思是我从服务器端引发异常并在 EXT 中处理它?
  • 如果您使用 ExtJS 发出 Ajax 请求并且由于会话过期而失败,那么当然,最好在 ExtJS 中捕获该错误并采取必要的措施(显示消息,重定向到登录页面等)。
  • 感谢您的及时回复。是的,当他的会话超时时,我试图将用户重定向到登录页面。您是否认为必须在 global.asax Session_End 事件中进行编码..会话超时是否有唯一的 http 代码。
  • 没有与会话超时直接相关的http代码(这有助于记住http是无状态协议-:))如果您的会话经过身份验证,会话超时后的请求将导致403/Forbidden状态

标签: javascript extjs session-timeout


【解决方案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 请求完全失败(403 等 HTTP 错误)时,Ajax 请求被认为是不成功的。这很重要,因为通常可以为成功和不成功的请求定义不同的回调函数(如上面的示例代码)。

【讨论】:

    【解决方案2】:

    你可以模拟超时会话...

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

    【讨论】:

    • 感谢您的回复。我能够以不同的方式完成此操作 - 当新会话开始并且用户的身份验证 cookie 过期时,我将返回一个响应,其中包含一条传达会话超时的错误消息。
    猜你喜欢
    • 2014-07-02
    • 1970-01-01
    • 2010-12-05
    • 2019-01-23
    • 2021-08-23
    • 2014-05-19
    • 2010-12-25
    相关资源
    最近更新 更多