2017-04-18 52 views
0

我有一个在codeigniter框架中开发的web应用程序。在Ajax调用中会话过期时避免显示登录页面

我的问题是,我有很多ajax调用在我的后端,现在在ajax调用如果会话过期,其显示的登录页面,我想加载动态数据的地方。

如何在不改变所有ajax调用的情况下解决此问题?

$.ajax({ 
    url: "<?= base_url("controller/method") ?>", 
    data: {key1: value1,key2: value2}, 
    type: "POST", 
    dataType: "HTML" 
    success: function(){ 
     // here i'm processing the response. 
    } 
}); 
+0

你可以发布Ajax代码吗? – Gntem

+0

如果会话过期,您应该获得Web应用程序中正常的登录页面。现在“动态数据”是什么意思? –

+0

@ Mr.Phoenix我添加了我的ajax代码。 – user7573053

回答

0

确定,所以存在用于这样的简单的解决方案,

在服务器侧上;

if($_SESSION['loggedin']=='false') //assuming the login check 
    header('app-stat : loggedout') //send custom header to client 

现在在客户端,您检查ajax调用中的标头。

成功的功能就像;

success: function(data, textStatus, request){ 
    if(request.getResponseHeader('app-stat')=='loggedout') 
    { 
      //do what ever you want 
    } 
    else{ 
      //enjoy 
    } 
}, 

好的,为你已经添加的500个Ajax解决方案是;

$(document).ajaxSuccess(function() { 
    //I think now you know what to do 
}); 
+0

这个解决方案很好,但我必须在所有的ajax调用中改变这个(我的后端有超过500个ajax调用)。 – user7573053

+0

添加解决方案请检查。 –

+0

我不喜欢这些成功的错误。这就是HTTP错误代码的用途。 – apokryfos

0

在你的控制器

class Controller_name extends CI_Controller { 

    public function __construct() 
    { 
     parent::__construct(); 
     $user_id = $this->session->userdata('user_id'); // Session id of user 
     if(!$user_id || $user_id == '') 
     { 
      if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 
      { // Checking if ajax request received or not 

       echo json_encode(array('status' => FALSE,'msg' => 'You are not logged in')); 
       die; 
      } 

     } 
    } 
} 

而在你的Ajax请求

$.ajax({ 
    url: "<?= base_url("controller/method") ?>", 
    data: {key1: value1,key2: value2}, 
    type: "POST", 
    dataType: "json" 
    success: function(resp){ 
     if(resp.status == false) 
     { 
     alert(resp.msg); 
     } 
    } 
}); 

注:这里我使用数据类型:“JSON在Ajax请求