使用jquery/Javascript在浏览器关闭或标签关闭时执行注销

3

我有一个要求,即在浏览器关闭或标签关闭时注销用户。我尝试使用以下代码,它可以正常工作,但存在以下问题: 1.) 当我单击浏览器刷新按钮时,它仍然会注销 2.) 当我更改浏览器中的URL并按回车键时,它仍然会注销 以上两个问题都是不希望出现的,我想要防止这种情况。有人能建议如何解决吗? 以下是我的脚本:

var validNavigation = false;
 
function wireUpEvents() {

  window.onbeforeunload = function(e) {
   if (!validNavigation) {
         endSession();
      }
  }
 
  //Hits the server and invalidates the session
 function endSession() {
  $.ajax({
      url : "performLogout..",
      type : "GET",
      async: false,
      success : function(response) {},
      error: function(response) {}
    });
  } 
  
 
  //On click of F5
  document.onkeydown = function disableKeys() {
   if( typeof event != 'undefined' ) {
     if(event.keyCode == 116) {
       validNavigation = true;
       event.keyCode = 0;
       //return false; //return false if u want to disable refresh
     }
   }
 };
 
  // Attach the event click for all links in the page
  $("a").on("click", function() {
    validNavigation = true;
  });
 
  // Attach the event submit for all forms in the page
  $("form").on("submit", function() {
    validNavigation = true;
  });
 
  // Attach the event click for all inputs in the page
  $("input[type=submit]").on("click", function() {
    validNavigation = true;
  });
  
  $("select#select-id").on("change", function() {
   validNavigation = true;
 });
 
}
 
// Wire up the events as soon as the DOM tree is ready
$(document).ready(function() {
  wireUpEvents();
});

谢谢


你之前有做过任何关于这个问题的研究吗?http://stackoverflow.com/search?q=log+out+when+browser+tab+closed - CBroe
@CBroe 我已经阅读了几篇帖子,但没有找到积极的答案。我之所以问这个问题是因为我想知道是否有解决方案或变通方法来满足我的需求。谢谢。 - Hasan K
那应该已经向您展示了,没有可靠的、跨浏览器的方法来实现这一点。 - CBroe
1个回答

1
对于第二个问题,无法区分用户是关闭标签页还是输入新的URL跳转。我的问题是,如果他们在地址栏中输入google.com,与关闭您的选项卡并导航具有相同的效果,为什么不将他们注销?您是否考虑过他们登录,打开您网站上的新选项卡,然后关闭该选项卡。原始选项卡仍然打开,但您想要将他们注销?在假定用户意图之前,请考虑边缘情况。
对于您的场景,如果每个会话只有一个选项卡,则可以研究一下SessionStorage,它仅在本地保存信息,直到关闭浏览器窗口。所有新选项卡都将是会话的新实例
也许一个好的方法是,无论何时用户离开页面,都将会话标记为暂停,然后在加载新页面时恢复他们的会话。在这种环境中,您需要在服务器上实现简单的垃圾回收以丢弃旧会话。
总之,除非你确信用户已经完成操作,否则不要强制注销他们。在你的努力稍微多一点几乎总是值得的,因为这样可以提供更好的用户体验。反之,你会失去宝贵的用户。

谢谢您的回复。对于1有什么想法吗? - Hasan K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接