2016-04-10 4 views
3

Ich habe eine Anforderung, den Benutzer im Browser schließen oder Tab schließen abzurechnen. Ich habe versucht, mit dem folgenden Code und es funktioniert gut, außer für die folgenden: 1.) Wenn ich auf die Schaltfläche Browseraktualisierung, loggt es immer noch 2.) Wenn ich die URL im Browser ändern und drücken Sie die Eingabetaste protokolliert out Beide der oben genannten sind unerwünscht und ich möchte verhindern. Kann jemand vorschlagen, wie? Hier ist mein Skript:Logout auf Browser schließen oder Tab schließen mit jquery/Javascript

var validNavigation = false; 
 
    
 
function wireUpEvents() { 
 

 
    window.onbeforeunload = function(e) { 
 
\t if (!validNavigation) { 
 
     endSession(); 
 
     } 
 
    } 
 
\t 
 
    //Hits the server and invalidates the session 
 
\t function endSession() { 
 
\t \t $.ajax({ 
 
\t \t  url : "performLogout..", 
 
\t \t  type : "GET", 
 
\t \t  async: false, 
 
\t \t  success : function(response) {}, 
 
\t \t  error: function(response) {} 
 
\t \t }); 
 
\t \t } 
 
    
 
    
 
    //On click of F5 
 
    document.onkeydown = function disableKeys() { 
 
\t if(typeof event != 'undefined') { 
 
\t  if(event.keyCode == 116) { 
 
\t  validNavigation = true; 
 
\t  event.keyCode = 0; 
 
\t  //return false; //return false if u want to disable refresh 
 
\t  } 
 
\t } 
 
\t }; 
 
    
 
    // 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() { 
 
\t validNavigation = true; 
 
\t }); 
 
    
 
} 
 
    
 
// Wire up the events as soon as the DOM tree is ready 
 
$(document).ready(function() { 
 
    wireUpEvents(); 
 
});

Dank

+0

Haben Sie _any_ Forschung dazu vorher getan ...? http://stackoverflow.com/search?q=log+out+when+browser+tab+closed – CBroe

+0

@CBroe Ich habe ein paar Beiträge gelesen und konnte keine positive Antwort finden. Der Grund, den ich gefragt habe, ist, wenn jemand weiß, ob es eine Lösung oder einen Workaround für dieses Problem gibt, um meine Anforderung zu vervollständigen. Danke, –

+0

Nun, das sollte dir schon gezeigt haben, dass es keinen zuverlässigen, browserübergreifenden Weg gibt, dies zu erreichen. – CBroe

Antwort

1

Für Nummer 2 gibt es keine Möglichkeit, zwischen einem Benutzer Schließen einer Registerkarte und einen Benutzer zu unterscheiden, eine neue URL eingeben, um zu reisen. Meine Frage an Sie ist, warum würden Sie sie nicht abmelden, wenn sie google.com in ihre Adressleiste eingeben, was den gleichen Effekt hat wie das Schließen Ihrer Registerkarte und das Navigieren? Haben Sie darüber nachgedacht, dass sie sich anmelden, einen neuen Tab auf Ihrer Site öffnen und diesen Tab schließen? Der ursprüngliche Tab ist noch geöffnet, aber Sie möchten sie abmelden? Denken Sie an Randfälle, bevor Sie die Absicht des Benutzers annehmen.

Für Ihr Szenario, wenn es nur eine Registerkarte pro Sitzung gibt, können Sie in SessionStorage suchen, die Informationen lokal nur speichert, bis das Browserfenster geschlossen wird. Alle neuen Registerkarten werden neue Instanzen von Sitzungen sein.

Vielleicht wäre ein guter Ansatz, eine Sitzung als paused zu markieren, wann immer ein Benutzer die Seite verlässt, egal welche Bedingung dann resume ihre Sitzung, wenn eine neue Seite geladen wird. In dieser Umgebung müssen Sie eine einfache Speicherbereinigung auf dem Server implementieren, um alte Sitzungen zu verwerfen.

Alles in allem, loggen Sie sich nicht aus, es sei denn, Sie sind 100% sicher, dass sie erledigt sind. Ein wenig mehr Aufwand für Ihr Ziel ist fast immer die bessere Benutzererfahrung wert. Sie werden wertvolle Benutzer auf andere Weise verlieren.

+0

Danke für Ihre Antwort. Irgendeine Idee über 1? –