2014-04-25 161 views
2

在我使用的頁面中,有一個加載了ajax的內容到<div>。項目中的所有頁面在登錄時都受到保護。根據邏輯,如果用戶將窗口閒置300秒或更長時間,PHP將重定向到登錄頁面。這在刷新和導航頁面時效果很好。但我面對的問題是,當我加載<div>或任何帶有AJAX輸出的元素時,有時登錄頁面會加載到元素中。這是因爲窗口空閒並且PHP服務器重定向到登錄頁面。我需要將主頁面重定向到登錄頁面,而不是通過AJAX加載重定向的登錄頁面。想法請。如果AJAX url重定向到登錄頁面,則重定向到登錄頁面

enter image description here

PHP檢查最後一個活動,並重定向如果>300秒,

if(isset($_SESSION['active_last'])) 
{ 
    if((time()-$_SESSION['active_last'])>300) 
    { 
     $_SESSION['toredirect']=$_SERVER['REQUEST_URI']; 
     $rd_loc=BASEPATH."login/?error=timeout"; 
     header("location: $rd_loc"); 
    } 

    $_SESSION['active_last']=time(); 
} 
+0

燦你顯示一些導致重定向的代碼? –

回答

6

這是AJAX請求將追加到你想要顯示的地方應對共同的問題。你需要自己處理。這裏是我的解決方案,在Session過期的情況下,請求是AJAX,我返回狀態碼401,然後這就是我在全局級別處理它的方式。我已將這些代碼放在主頁面/模板中。

 $(document).ajaxError(function (event, jqxhr, settings, exception) { 
      if (jqxhr.status === 401) { 
        alert('Session is expired. Login again'); 
        window.location.href = '../Admin/Signout.php'; 
        } 
      }); 
0

這有點困難。瀏覽器處理重定向到登錄頁面,所以用ajaxError處理錯誤將不起作用。所有跡象表明,該請求是成功的JavaScript。如果有什麼獨特的東西可以在響應中查找以識別登錄頁面,可以添加類似內容:

$.ajaxSetup({ 
dataFilter:function(data, type) { 
    var match = data.match (/some regex that will only match login page/); 
    if (match!=null) { 
     window.location.href = '/login.php'; 
    }else { 
     return data; 
    } 
} 
}); 
0

請按照以下步驟操作。它爲我工作。

1步 - 讓(在如母版頁)中央方法

$(document).ajaxStart(function() { 
     $.ajax({ 
      type: "POST", 
      url: 'Home.aspx/CheckSessionTimeout', 
      async: false, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (result) { 
       if (parseInt(result.d) == 0) { 
        window.location.href = 'Login.aspx'; 
       } 
      }, 
      Error: function (msg) { 
       window.location.href = 'Login.aspx'; 
      } 
     }); 

第2步 - 2創建Home.aspx頁面的Web方法

[WebMethod(EnableSession = true)] 
    public static int CheckSessionTimeout() 
    { 
     if (HttpContext.Current.Session[LoginuserID] != null) 
     { 
      return 1; 
     } 
     else 
     { 
      return 0; 
     } 
    }