Domanda

Nella mia applicazione php, utilizzo $_SESSION per verificare se un utente ha effettuato l'accesso.Se un utente lascia qualsiasi pagina del mio sito all'indirizzo http://miosito.com e va a http://qualchealtrositoweb.com, Voglio disconnetterli automaticamente, in modo tale che se ritornano a qualsiasi pagina su http://miosito.com, devono effettuare nuovamente l'accesso.

C'è un modo semplice per farlo?

È stato utile?

Soluzione

Non si può dire in modo esplicito quando un utente di foglie il vostro sito, la soluzione migliore sarebbe essere quello di implementare un timeout sulle sessioni.

Come la maggior parte delle risposte hanno detto, potrebbero verificare con l'evento JavaScript onbeforeunload ma l'utente può by-passare questo disabilitando JavaScript o, come BalusC aveva fatto notare , utilizzando un browser web che non lo supporta, come Opera.

Quindi, credo fermamente attuando un timeout sulle sessioni è il modo migliore per forzare un logout.

Altri suggerimenti

Si potrebbe eseguire una chiamata AJAX nel onbeforeunload evento per alcuni script lato server che ucciderà la sessione.

A parte mettere un timeout sulle sessioni - Non proprio. L'unico modo che mi viene in mente è l'evento JavaScript onbeforeunload che viene generato quando l'utente lascia la pagina corrente, ma questo evento non sa , dove l'utente sta andando. Si potrebbe tuttavia, se si davvero vogliono fare questo, forse costruire qualcosa sulla base della seguente soluzione hacky (non testata):

  • impostare un evento onbeforeunload che invia una chiamata AJAX al server. (Come per farlo con successo - così la chiamata passa attraverso prima che la pagina venga chiuso -. È una questione a sé stante, una ricerca per "onbeforeunload Ajax" su SO dovrebbe produrre qualche risultato

  • La chiamata di Ajax dovrebbe iniziare un conto alla rovescia dicendo che la sessione di questo utente sta per morire in, diciamo, quindici secondi.

  • Se l'utente sta lasciando il vostro sito, si applica il conto alla rovescia.

  • Se l'utente sta andando a una pagina diversa sul tuo sito, si cancella qualsiasi "morire" conti alla rovescia quando servono alla pagina successiva.

Questa è probabile che sia traballante perché potrebbe accadere che una richiesta Ajax di partenza un conto alla rovescia arriva al server dopo che la pagina successiva è già eliminare che il conto alla rovescia. Ma se si ha realmente bisogno di fare questo, questo può essere una direzione. Opere per gli utenti con JS abilitati solo, naturalmente.

Una seconda idea come implementare questa potrebbe essere quella di mettere un timeout estremamente basso sulle sessioni (ad esempio 90 secondi), e di porre iframe in ogni pagina che servite. Quella iframe avrebbe poi fare una chiamata alla pagina ogni 60 secondi.

Questo avrebbe funzionato senza JavaScript, ma potrebbe creare fastidiosi rumori di clic nelle vecchie versioni di Internet Explorer (non so se questo mi sono fermato a 6 o 7?)

Non è possibile (ma le sessioni saranno sospese automaticamente dopo un po ', così è possibile impostare il timeout per un breve periodo di tempo).

Da quello che so su PHP (che non è molto) avrebbe l'applicazione mai saputo che hanno lasciato il sito? Se vai a someotherwebsite.com, il codice non viene chiamato di nuovo fino al loro ritorno.

Sfortunatamente non proprio, questo è uno dei grandi problemi con le applicazioni web.Le tue applicazioni non hanno modo di sapere che il browser è passato a un sito Web diverso.

Come menziona ChristohpeD, puoi impostare il timeout della sessione.Ricorda solo che il tuo sito aggiornerà solo l'ora in cui il server riceve un post o qualche tipo di ping javascript.

Spero che aiuti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top