Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JS] Bij sluiten window, starten van logout functie

Pagina: 1
Acties:
  • 180 views sinds 30-01-2008
  • Reageer

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Wanneer een bezoeker de pagina sluit/refreshed moet hij/zij een geredirect worden naar logout.php waarin de sessie wordt beeindigd. Ik heb nu de volgende stukjes code geschreven en wanneer ik //alert("test"); uncomment dan krijg ik ook netjes "test" te zien.

Ik krijg het niet voor elkaar dat logout.php geladen wordt in hetzelfde window. Wanneer ik _self weghaal dan wordt er door de browser (IE7) geprobeerd een popup te open, die geblokt wordt door IE7. Dat is dus niet de bedoeling. Hoe krijg ik het voor elkaar dat logout.php geladen wordt zodra de gebruik de window afsluit?

In mijn zoektocht op het internet heb ik niet tot een goede oplossing kunnen komen.
Ook websites als MSDN konden mij geen hulp bieden.

HTML:
1
<body onunload="logout();">


JavaScript:
1
2
3
4
5
function logout(){ 
    var url = "/includes/logout.php";
    window.open(url,'_self');
    //alert("test");
} 

PHP:
1
2
3
4
5
6
7
8
9
10
<?php
session_start();
if(true === session_unregister('gebuiker')) {
    echo "Please close this window!";
} else {
    unset($_SESSION['gebruiker']);
    sleep(3);
    echo "Please close this window!";
}
?>

  • mjax
  • Registratie: September 2000
  • Laatst online: 19:27
Let hier even mee op. Ik heb in het verleden iets soortgelijks gebouwd en het werkte goed. Dat wil zeggen, zolang er maar 1 venster openstaat. Wat gebeurt er nl. als de gebruiker (bijvoorbeel met Ctrl/Shift klik een link aanklikt en dat nieuwe vester sluit)? Dan wordt die logout functie ook aangeroepen, ook al heb je nog andere vensters openstaan.

Een alternatieve oplossing is om met een AJAX heartbeat te gaan werken. Je zorgt ervoor dat vanuit elke pagina om de X seconden een AJAX call naar de server wordt gedaan. Op de server registreer je die call en je weet nu dat client Y nog actief ingelogd is. Zodra die calls niet meer binnenkomen, kun je er vanuit gaan dat alle vensters gesloten zijn en kun je de client op de server ook uitloggen.

  • b19a
  • Registratie: September 2002
  • Niet online
En wat nu als de gebruiker geen JS heeft? Liever een time-out na 20 minuten van geen gebruik van de applicatie. Evt kun je ook nog een cookie gebruiken die vervalt zodra de browser wordt gesloten.