0

我的后端使用 CodeIgniter,前端使用 ExtJS 4.1。在 CI 的控制器中,我检查用户会话是否结束,如果是,我执行

重定向(“登录”);

然而实际发生的是 - 我停止从服务器获取响应,但我的 ExtJS 仍在工作,我没有得到登录页面。当我在服务器端看到会话结束时,如何从 ExtJS 重定向?

谢谢

勒隆

4

3 回答 3

2
var runner = new Ext.util.TaskRunner();

// poll some page every 10 seconds
var task = runner.start({
    run: function() {
        Ext.Ajax.request({
            url: 'is_logged_out.php',

            success: function(response){
                var json = Ext.JSON.decode(response.responseText);

                // is we are logged out then redirect somewhere
                if (json.isLoggedOut) {
                    task.destroy();
                    location.href = json.redirectToPage;
                }
            }
        })
    },
    interval: 10000
})
于 2012-05-11T11:29:13.480 回答
1

您还可以添加特殊逻辑来处理 403 错误(假设您的 ExtJs 会话在后端已过期,但客户端仍然打开页面 - 下一个请求应该返回Not Authorized消息)。

查看单例类Ext.Ajax以了解如何订阅全局 Ajax 事件。

于 2012-05-11T20:33:57.007 回答
0

当用户的会话结束时,通常由用户自己通过执行某种行为来完成:例如,用户按下注销按钮。嗯,那个时候,客户端(ExtJS)应该是转发一个AJAX请求给服务器的,如下:

Ext.Ajax.request ({
  url: serverUrl + 'logout' ,
  success: function (response) {
    location.href = serverUrl + 'login';
  } ,
  failure: function (response) {
    // Something here to handle the failure
  }
});

当用户注销时,服务器会到达该请求:您的 CI 应用程序将通过会话并使用“200 OK HTTP/1.1”响应客户端,并且客户端提供将用户重定向到登录页面。

再见。

威尔克

于 2012-05-11T11:31:09.810 回答