如果用户正在关闭标签,我需要注销用户。我试图通过在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(但是很奇怪为什么服务器“认为”用户仍然登录)。
我该如何解决这个问题?
答案 0 :(得分:2)
默认情况下,服务器不跟踪登录用户。检查与所有请求一起提交的.ASPXAUTH cookie,以查看用户是否仍在进行身份验证。
如果用户的浏览器会话已结束,则服务器无法删除其.ASPXAUTH cookie。如果要确保它有效,可以在LogOff函数或beforeunload
处理程序中从客户端删除cookie。
编辑:根据您使用的ASP.NET MVC版本,您可能会看到.AspNet.ApplicationCookie
答案 1 :(得分:2)
onbeforeunload方法中执行的Ajax请求必须是同步的,否则在重定向发生之前它们将无法完成。
...
async: false,
...
另请注意,您的成功和错误警报不会发生。