Jquery 关闭选项卡时,AJAX注销不起作用

Jquery 关闭选项卡时,AJAX注销不起作用,jquery,ajax,asp.net-mvc,Jquery,Ajax,Asp.net Mvc,如果用户正在关闭选项卡,我需要注销该用户。我试图通过调用onbeforeunload方法上的ajax函数来实现这一点: $(document).ready(function () { window.onbeforeunload = function () { if (!validNavigation) { // I set validNavigation = true when user clicks on different internal l

如果用户正在关闭选项卡,我需要注销该用户。我试图通过调用
onbeforeunload
方法上的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调用,内部没有任何异常(由调试器检查),但用户保持登录状态。如果我在用户单击链接(而不是关闭选项卡)时调用此方法,则用户已注销(因此该方法正常工作)。我假设当标签关闭时cookies不能被清除(但是很奇怪为什么服务器“认为”用户仍然登录)


如何解决此问题?

默认情况下,服务器不跟踪已登录的用户。将检查随所有请求一起提交的.ASPXAUTH cookie,以查看用户是否仍然经过身份验证

如果用户的浏览器会话已结束,服务器无法删除其.ASPXAUTH cookie。如果您想确保它工作,您可以在注销功能中从客户端删除cookie,或者在卸载前
处理程序中删除cookie


编辑:根据您使用的ASP.NET MVC版本,您可能会查看
.AspNet.applicationOK

,默认情况下,服务器不会跟踪登录用户。将检查随所有请求一起提交的.ASPXAUTH cookie,以查看用户是否仍然经过身份验证

如果用户的浏览器会话已结束,服务器无法删除其.ASPXAUTH cookie。如果您想确保它工作,您可以在注销功能中从客户端删除cookie,或者在卸载前
处理程序中删除cookie


编辑:根据您使用的ASP.NET MVC版本,您可能会看到
.AspNet.ApplicationCookie

在onbeforeunload方法中执行的Ajax请求必须是同步的,否则它们将无法在重定向发生之前完成

...
async: false,
...

另外请注意,成功和错误中的警报不会发生。

在onbeforeunload方法中执行的Ajax请求必须是同步的,否则它们将无法在重定向发生之前完成

...
async: false,
...

另外请注意,不会出现成功和错误中的警报。

.ASPXAUTH
-这应该存在。是吗?如果您使用的是ASP.NET MVC 5
.ASPXAUTH
,则该选项或
.AspNet.ApplicationCookie
-应该存在。是吗?如果您使用的是ASP.NET MVC 5,请选择该选项或
.AspNet.applicationOK