2012-12-25 68 views
6

我有一個應用程序,其中大約20 http generic handler用於ajax call
我已經使用IReadOnlySessionState訪問我的處理程序中的會話。一切正常。
在通用http處理程序中處理會話超時

但是,當會話過期時,我的處理程序正在返回一些html,因爲它重定向到默認頁面,並且默認頁面的html會在響應中發回。

解決此問題。
我在處理程序檢查會話變量,如果它是空的我已經寫

context.Response.Write("logout") 

我在jQuery的阿賈克斯天氣,查看其是否註銷或其他任何東西。

$.ajax({ 
      url: "myhandler.ashx", 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { checklogout(data); $("#loading").hide(); }, 
      error: function() { $("#loading").hide(); }, 
      async: false 
     }); 


如果是註銷,那麼我已經使用位置重定向到登錄頁面。
我正在使用form-authentication來驗證用戶。

有沒有更好的方法來檢查和使用jquery-ajax調用重定向到登錄頁面。

+1

這可能會更好從你的處理程序返回一個正確的[HTTP狀態碼](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html),例如* 401 Unauthorized *(也許創建一個基本處理程序,這樣你不重複這個邏輯)。你可以在你的中央AJAX選項('$ .ajaxsetup')中查找這個值,因此只需要在一個地方查看代碼。這是你正在尋找什麼? –

回答

2

您的處理程序位於通過asp.net身份驗證自動控制的目錄中。

我應該做的是不要讓自動控制通過安裝在asp.net認證web.config所以對處理程序的調用將完成乙醚用戶登錄乙醚不,並在處理程序內我會檢查一下,如果調用該處理程序的用戶有會話和身份驗證。

然後在用戶沒有足夠的驗證讀取該處理程序我回到一個簡單的標誌,我的Ajax調用,然後承認並重定向的情況下,例如,如:

$.ajax({ 
    url: "myhandler.ashx", 
    contentType: "application/json; charset=utf-8", 
    success: function (data) 
    { 
     if(data.redirectToLogin == true) 
     { 
      window.location = "/login.aspx" 
     } 
     else 
     { 
      // do the rest job 
     } 
    }, 
    error: function() 
    { 
     $("#loading").hide(); 
    } 
}); 
+0

似乎是個好主意。但是當'data'沒有屬性'redirectToLogin'時,它會給出一個'java-script'異常。另外,如果我在我的webconfig文件中使用'',將會有任何安全威脅,儘管我會檢查所有處理程序中的用戶會話。 –

+1

@krshekhar你可以簡單地返回一個像「ko」或其他標誌的字符串,這很容易解決。 – Aristos