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