Bene, alla fine sembra che ce l'abbia fatta.
Un po' di ragionamento, un po' di copia e incolla qui e là
e funge, quindi ne condivido il codice.
Semplice javascript da allegare però in ogni pagina che prevede il "distacco" da un sistema a login ( evitate solo la pagina di login dove ovviamente ci si arriva se non siete loggati
)
Codice:
codice:
var validNavigation = false;
// Attach the event keypress to exclude the F5 refresh
$(document).bind('keypress', function(e)
{
if (e.keyCode == 116)
{
validNavigation = true;
}
});
// Attach the event click for all links in the page
$("a").bind("click", function()
{
validNavigation = true;
});
// Attach the event submit for all forms in the page
$("form").bind("submit", function()
{
validNavigation = true;
});
// Attach the event click for all inputs in the page
$("input[type=submit]").bind("click", function()
{
validNavigation = true;
});
function exit()
{
if (validNavigation === false)
{
$.ajax(
{
url: 'logout.php',
type: 'GET',
async:false,
disableCaching: true,
success: function(data)
{
return true;
},
error: function()
{
alert('C\'è stato un errore cercando di effettuare il logout...');
}
});
}
};
window.onunload = function()
{
exit();
}
Spiegazione:
validNavigation = false, serve a dire al sistema che si può uscire, è una variabile globale.
Viene messa a true da quegli eventi che si vogliono escludere, come ad esempio la pressione del tasto F5 che di fatto non prevede il logout.
Altra cosa riguarda i link che di fatto sono un cambiamento di pagina, ma se previsti come menù del sito non possono certo prevedere un logout.
Ma se uno preme su un link esterno? Certo il logout deve essere assicurato, per ora con questo script non è così.
Oppure la pressione di un tasto di submit, stessa storia, non è un logout; in altre parole in questi casi validNavigation deve essere unguale a true.
Dato che è complicato intercettare certi tasti, come appunto F5 e dato che per altre ragioni utilizzo la libreria jquery, tanto valeva utilizzarla anche per il monitoraggio dei tasti e dei link nella pagina.
così come pure nella funzione exit() richiamata dall'evento onunload, l'utilizzo di ajax usa la comoda funzione di jquery.
Niente vieta di usare puro javascript ovviamente.
Anzi sarei felice se qualcuno in vena di lavoro volesse cimentarsi e poi postare il codice.
Comunque sia io ho utilizzato un sistema in ajax che chiama un file remoto che di fatto effettua il logout in modo silenzioso, ma nulla vieta di fare un semplice redirect su una pagina che richiede il logout da parte dell'utente.
Insomma è una scelta del programmatore.