huby: Eventhandler für Browser Reload

Hallo,

ich möchte ein logout-Script aufrufen, sobald die Seite verlassen wird.

Damit dieses Script nicht beim navigieren auf der eigenen Seite aufgerufen wird, hab ich mir einen eventhandler gebaut, der überprüft ob ich nach extern oder intern weiterleite.

Das ganze sieht folgendermaßen aus:

document.onclick = clicker;
var leave=true;
function clicker (e) {
   e = e || window.event;
   var target = e.target || e.srcElement;
   var tagnam = (target.nodeName)?target.nodeName.toLowerCase():(target.tagName)?target.tagName.toLowerCase():"";
   var tt=(String(target.type)=='submit')?true:(String(target.type)=='image')?true:(String(target.type)=='button')?true:false;
   if (!target.onclick && ((tagnam=='input' && tt) || (tagnam=='a' && (String(target).indexOf('http')!=0 || String(target).indexOf(doc_Server)>-1))))
     {leave=false;}
}

<body onunload="if(leave==true) {ajax(0 , "logout.php?", "", 0);}">

Allerdings wird logout.php auch bei einem Reload aufgerufen. :(

Hatt jemand eine Idee, wie ich auch bei einem Reload meine Variable leave auf false setzten kann?

Danke im voraus

huby

  1. Hi,

    ich möchte ein logout-Script aufrufen, sobald die Seite verlassen wird.

    Eigentlich reichlich unsinniges Vorhaben ... siehe aeltere Diskussionen im Archiv.

    Allerdings wird logout.php auch bei einem Reload aufgerufen. :(

    Hatt jemand eine Idee, wie ich auch bei einem Reload meine Variable leave auf false setzten kann?

    Gar nicht auf onunload reagieren - sondern gleich auf das Klicken auf einen Link (bzw. ein abschickendes Formularelement)?

    (Dabei muesste dann natuerlich u.a. zwischen Links- und Rechtsklick unterschieden werden - denn du willst mich ja vermutlich nicht gleich ausloggen, nur weil ich mal das Kontextmenue auf einem Link nutze ...)

    MfG ChrisB

    1. Danke für Deine Antwort.

      Eigentlich reichlich unsinniges Vorhaben ... siehe aeltere Diskussionen im Archiv.

      Warum unsinnig?

      Gar nicht auf onunload reagieren - sondern gleich auf das Klicken auf einen Link (bzw. ein abschickendes Formularelement)?

      onunload wäre mir deshalb wichtig, damit das Script auch aufgerufen wird wenn das Browserfenster einfach geschlossen wird.

      huby

      1. Hi,

        Eigentlich reichlich unsinniges Vorhaben ... siehe aeltere Diskussionen im Archiv.

        Warum unsinnig?

        Siehe Archiv :-)

        Weil' es einfach einen *Fehler* in deiner serverseitigen Applikation darstellen wuerde, wenn diese bei Kommunikation ueber ein zustandsloses Protokoll wie HTTP auf einen expliziten "Logout" angewiesen waere.

        onunload wäre mir deshalb wichtig, damit das Script auch aufgerufen wird wenn das Browserfenster einfach geschlossen wird.

        Abgesehen davon, dass selbst das nicht alle Browser leisten duerften - was ist, wenn mir die Kiste einfach "abschmiert", der Strom ausfaellt oder sonstwas ...?

        Wenn sich dann deine Applikation wirklich auf einen expliziten Logout verlaesst, evtl. sogar einen erneuten Login verweigert, weil sie mich noch als "eingeloggt" ansieht - Prost Mahlzeit.

        MfG ChrisB

        1. Hallo ChrisB,

          Weil' es einfach einen *Fehler* in deiner serverseitigen Applikation darstellen wuerde, wenn diese bei Kommunikation ueber ein zustandsloses Protokoll wie HTTP auf einen expliziten "Logout" angewiesen waere.

          Abgesehen davon, dass selbst das nicht alle Browser leisten duerften - was ist, wenn mir die Kiste einfach "abschmiert", der Strom ausfaellt oder sonstwas ...?

          Wenn sich dann deine Applikation wirklich auf einen expliziten Logout verlaesst, ...

          Das ist mir natürlich schon klar, daß dies keine zu 100% zuvelässige Methode ist.

          Das sehe ich eher als eine zusätzliche Option für die 20% meiner Besucher die die Seite ohne logout verlassen.

          Viele Grüße

          huby

        2. Hi,

          gleich noch mal.

          Weil' es einfach einen *Fehler* in deiner serverseitigen Applikation darstellen wuerde, wenn diese bei Kommunikation ueber ein zustandsloses Protokoll wie HTTP auf einen expliziten "Logout" angewiesen waere.

          Bin auch für eine für Tipps dankbar wie ich das Serverseitig vernünftig lösen könnte.

          mfg

          huby

  2. Hallo,

    Hatt jemand eine Idee, wie ich auch bei einem Reload meine Variable leave auf false setzten kann?

    Nein. Ich fürchte, das wirst du nicht zuverlässig umsetzen können. Die Frage gabs hier schon mehrmals und was du hast ist schon die beste mir bekannte Lösung.

    Mathias

    1. Hallo Mathias,

      danke für die Antwort.

      Nein. Ich fürchte, das wirst du nicht zuverlässig umsetzen können.

      Schade, onreload wäre ein schöner eventhandler.

      huby