Domanda

Vorrei memorizzare il login, logout e durata nel database.

  • Viene creato il tempo di accesso quando l'utente è autenticato (collegato con successo)
  • Viene creato il tempo di logout quando l'utente fa clic sul pulsante di logout
  • La durata è di logout - tempo di accesso. (Logout meno di login)

Ma il problema è, che cosa succede se l'utente non ha ancora fare clic sul pulsante di logout. Qui ci sono le situazioni:

  • perdita di Internet
  • Chiudere il browser / scheda. (Ho bisogno di questo deve utilizzare javascript, ma io donnu come farlo, qualche idea?)

EDIT:

Ho dimenticato di aggiungere qualcosa alla domanda, il programma è un programma di lampo piena, non v'è alcuna navigazione ad altre pagina. Solo 1 pagina

È stato utile?

Soluzione

Non si può contare sulla ricezione di un evento per l'utente la sessione, se semplicemente chiudere il browser, o scompaiono da internet.

In questo caso dovrete avere un timeout di sessione di qualche tipo, e registrare il Logout quando la vostra applicazione si rende conto la loro sessione è troppo vecchio.

Se questo è un vero e proprio requisito, allora direi che avete bisogno di un posto di lavoro "cron" monitorare le sessioni per timeout. Quando una sessione è scaduta, se la fosse connessi, poi registra un evento "logout" per l'utente.

Si noti che non è possibile utilizzare (per esempio) evento Session_End di ASPNET, perché non sarà chiamato in modo affidabile sia (per esempio se si riavvia il processo del server).

Un'altra opzione è quella di aggiungere il tempo di logout prossima volta che i registri utente su - quando accedono, di controllare per le vecchie sessioni e scontato che qualsiasi che non sono state chiuse durato per un determinato periodo di tempo dopo l'ultima pagina di colpo.

Questo è davvero tutto quello che puoi fare.

Altri suggerimenti

E 'importante ricordare che tutte / funzioni di log-in di sessione in PHP sono basano di solito biscotto. Così, cambiando la durata del cookie di sessione dovrebbe risolvere il problema:

http://us3.php.net /manual/en/function.session-set-cookie-params.php

Inoltre, è possibile impostare le sessioni PHP in modo da utilizzare solo i cookie:

http: // US2 .php.net / manuale / it / session.configuration.php # ini.session.use-solo-cookies

Anche in questo caso, si può prendere la finestra / tab del browser vicino ma ... perché? Per esempio io possa avere il tuo sito aperto in più schede. Se chiudo una di quelle schede dovrei sia disconnesso automaticamente del tuo sito web? Questo è un design molto male. Invece, impostare la durata della sessione in modo che scade se il Browser è chiuso e non solo una scheda. (Si noti inoltre che window.unload sarà il logout quando qualsiasi Finestra sul tuo sito che si chiude -.? Compreso un pop-up o un iframe Vuoi davvero che)

http: //us2.php .net / manuale / it / session.configuration.php # ini.session.cookie-vita

Se si desidera memorizzare lo stato della sessione in un database provare qualsiasi una href="http://www.raditha.com/php/session.php" rel="nofollow noreferrer"> questi guida . Oppure, rotolare il proprio con session_set_save_handler

Per quanto riguarda la chiusura del browser / scheda, è possibile associare l'evento unload (window.onunload, jQuery $(window).unload(fn) , o qualsiasi altro) per notificare il server. Una soluzione più generale finalità sarebbe quella di ping periodicamente il server (ad esempio, ogni 5 minuti), ma potrebbe essere fastidioso per l'utente, in modo da farlo con giudizio.

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