2013-12-09 25 views
0

如果用戶正在關閉標籤頁,我需要註銷用戶。我試着通過在onbeforeunload方法調用一個Ajax功能做到這一點:標籤關閉時,AJAX註銷不起作用

$(document).ready(function() { 
     window.onbeforeunload = function() { 
      if (!validNavigation) { // I set validNavigation = true when user clicks on different internal links etc 
       LogOff(); 
      } 
     } 
    }); 

    var validNavigation = false; 

function LogOff() { 
    $.ajax({ 
     cache: false, 
     data: { }, 
     dataType: 'json', 
     url: '/Account/LogOffAjax', 
     type: 'post', 
     success: function (resp) { 
      if (resp.IsSuccessful) { 
      } 
      else { 
       alert(resp.ExceptionKey); 
      } 
     }, 
     error: function (data) { 
      alert('unknown error'); 
     } 
    }); 

}; 

方法,無需內部(由調試器檢查)任何異常LogOffAjax來電,但用戶停留登錄如果我調用此方法時。用戶只需點擊鏈接(不關閉標籤) - 用戶已註銷(因此方法正確)。我認爲當標籤關閉時cookie不能被清除(但是爲什麼服務器「認爲」用戶仍然登錄很奇怪)。

我該如何解決這個問題?

回答

2

默認情況下,服務器不會跟蹤登錄的用戶。隨所有請求一起提交的.ASPXAUTH cookie將被檢查以查看用戶是否仍然通過身份驗證。

如果用戶的瀏覽器會話結束,服務器無法刪除其.ASPXAUTH cookie。如果您想確保它正常工作,您可以在LogOff函數或beforeunload處理程序中從客戶端刪除Cookie。

編輯:根據您正在使用ASP.NET MVC的是什麼版本的,你可能會尋找在.AspNet.ApplicationCookie

+0

好的,哪個cookie名稱需要清除? –

+1

'.ASPXAUTH' - 應該存在。可以?無論是那個還是'​​.AspNet.ApplicationCookie',如果你使用的是ASP.NET MVC 5 – damienc88

2

阿賈克斯在onbeforeunload方法執行必須是同步請求,否則將無法前完成重定向發生。

... 
async: false, 
... 

另請注意,您的成功和錯誤警報不會發生。