Visualizzazione risultati 1 fino 3 di 3
Like Tree1Likes
  • 1 Post By alemoppo

Discussione: Mostrare gli utenti online

  1. #1
    esperatempo non è connesso Utente Blog
    Data registrazione
    28-11-2021
    Messaggi
    24

    Predefinito Mostrare gli utenti online

    Ciao a tutti,

    in una pagina del mio sito ho un elenco di alcuni utenti, dove un pallino verde indica se l'utente è online e un pallino rosso se è offline. Ho definito i metodi PHP "online()" e "offline()", che scrivono un valore in un campo nel database e che possono essere richiamati dall'interno di un codice Javascript. Ho quindi scritto un codice Javascript, dove ho aggiunto un listener all'evento "visibilitychange" (l'unico che si attiva davvero, quando l'utente sta leggendo una pagina del sito o passa a un'altra pagina), e tutto funziona correttamente.

    Ma se l'utente chiude la scheda del browser, invece di passare a un'altra, l'evento "visibilitychange" non viene attivato e l'utente rimane online. Ho provato ad aggiungere un listener agli eventi "beforeunload" e "unload", ma non vengono attivati quando l'utente chiude la scheda, a meno che non chiamo il metodo "preventDefault()", che a volte funziona e a volte no, ma mostra comunque la finestra di dialogo che chiede all'utente di confermare l'uscita dalla scheda, cosa che non voglio che faccia. E comunque non funziona sempre. Quindi, come posso impostare l'utente offline, quando chiude la scheda del browser?

    Non sapendo se questo fosse possibile da codice Javascript, ho anche provato un'altra soluzione che in locale funziona, e cioè ho creato un evento nel database che ogni minuto controlla se il campo online è stato cambiato negli ultimi dieci minuti e in caso negativo imposta l'utente offline. Ma su Altervista sembra che non si possano definire eventi, quindi non so cosa fare. So che esistono i cron job, ma mi sembra che se ne possa impostare soltanto uno al giorno.

    Qualche idea?

    Grazie
    Ultima modifica di esperatempo : 21-08-2023 alle ore 18.26.24

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,179

    Predefinito

    Non hai modo di intercettare la chiusura del browser: ci sono alcuni casi in cui è impossibile, ad esempio un crash del browser stesso.

    So che non è un modo elegante, ma a quanto ne so è l'unico per fare quel che vorresti: ad ogni azione, aggiorni anche il timestamp dell'ultima azione. Se l'ultima azione è stata eseguita da più di x minuti/secondi, allora lo consideri offline, altrimenti online.
    Per migliorare questo funzionamento, potresti eseguire una richiesta asincrona al server con il solo scopo di aggiornare il campo "ultima azione" nel caso che l'utente tenga la pagina aperta senza compiere azioni: puoi impostare una richiesta asincrona ad esempio ogni x/2 minuti/secondi, o comunque dipende da quanta precisione vuoi ottenere.

    Se qualche altro utente ha altre idee, ben vengano!

    Ciao!
    Ultima modifica di alemoppo : 22-08-2023 alle ore 12.51.20
    esperatempo likes this.

  3. #3
    esperatempo non è connesso Utente Blog
    Data registrazione
    28-11-2021
    Messaggi
    24

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Se l'ultima azione è stata eseguita da più di x minuti/secondi, allora lo consideri offline, altrimenti online.
    Ottima idea, funziona.

    Grazie

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •