2014-11-04 79 views
0

現狀:阿賈克斯會話超時

我的web應用程序是密碼protected.For每個HTTP請求我們對服務器,它正在覈對會話存在。如果會話已過期,則用戶將轉至登錄頁面。 這對於http請求來說沒問題。但是如果它是一個AJAX請求,那麼就像http請求一樣,如果session已經過期,它也會被轉發到登錄頁面。

問題:

如果我們直接顯示在瀏覽器的AJAX響應,然後在地方我們預期的響應將顯示在您的browser.And登錄頁面內容,如果你將獲取任何預期格式的數據,那麼它會拋出JavaScript錯誤。

我的代碼:會話超時,當我打電話通過我的代碼Ajax請求

<script> 
function details() { 
var xyz = document.getElementById("name").value; 
// Returns successful data submission message when the entered information is stored in database. 
var dataString = 'name=' + xyz; 

// AJAX code to submit form. 
$.ajax({ 
type: "POST", 
url: "user.php", 
data: dataString, 
cache: false, 
success: function(html) { 
document.getElementById("content").innerHTML=html; 
}, 
error: function(XMLHttpRequest, textStatus, errorThrown) { 
    if (XMLHttpRequest.status === 401) { 
      location.href = 'index.php'; 
     } 
} 
}); 
return false; 
} 
</script> 

。它會將login.php內容加載到當前頁面中,而不是將用戶轉發給登錄頁面

指導我在哪裏做錯了什麼。
謝謝。

+0

你嘗試過'window.location.href'嗎? – 2014-11-04 07:34:21

+0

@northkildonan是的,我嘗試過,但沒有工作..我正在做正確的處理使用ajax會話時間? – 2014-11-04 07:36:05

+0

您確定您正在設置401 statusscode標頭嗎? 'header('HTTP/1.1 401 Unauthorized',true,401);' – 2014-11-04 07:42:19

回答

2

如果你正在使用多個ajax請求,那麼你可以使用jquery ajaxComplete函數。
此函數每次在ajax調用後但在附加到該ajax事件的成功或失敗函數之前運行。
例如,對於這個代碼是:

jQuery("body").ajaxComplete(
       function(event, request, options) { 
        if (request.responseText == "login_required") { 
         window.location.href = "login.php"; 
        } 
       } 
      ); 

並在您的服務器端,您只需要檢查,如果該請求是一個Ajax請求,如果用戶沒有登錄,只是打印「login_required」,並停止執行代碼(退出代碼)。
用戶將重定向到login.php頁面