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

时间:2013-12-09 21:38:04

标签: 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 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 个答案:

答案 0 :(得分:2)

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

如果用户的浏览器会话已结束,则服务器无法删除其.ASPXAUTH cookie。如果要确保它有效,可以在LogOff函数或beforeunload处理程序中从客户端删除cookie。

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

答案 1 :(得分:2)

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

...
async: false,
...

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