Visualizzazione risultati 1 fino 21 di 21

Discussione: [PHP] capire quando un utente esce dal sito

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

    Predefinito [PHP] capire quando un utente esce dal sito

    Salve.

    Ho cercaro come da regolamento ed ho trovato questo topic che tratta più o meno del mio problema:

    Io vorrei eseguire un cidice quando un utente esce dal sito.

    Ho pensato con JS: infatti, usando onUnload, faccio eseguire una funzione che manda l'utente in una pagina .php dove faccio eseguire il codice php.

    Ma, (almeno con IE8), SE CAMBIO SITO FUNZIONA, ma se CHIUDO il browser, no.{infatti, JS viene eseguito dal browser: se lo chiudo...}.

    Quindi: c'é una funzione in php per capire (LATO SERVER, naturalmente) quando un utente esce e/o cambia sito??

    Grazie,

    CIAO!

  2. #2
    Guest

    Predefinito

    Lato server, non penso che esista...

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

    Predefinito

    ...Allora come faccio??:

    Io vorrei vedere quante persone sono online: per far questo, appena un utente si collega, nel db setto un valore ad 1.

    Quando ESCE, lo rimetto a 0. Se non capisco quando esce, come faccio???

    Grazie,

    CIAO!

  4. #4
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Utilizzando PHP basta usare la funzione time().

    Praticamente nel DB aggiungi un nuovo campo e chiamalo sessione, time, tempo...quello che vuoi dopodichè devi fare che ogni volta che viene lanciata la query che cambia da 0 a 1 il tuo campo (quello che permette di capire se un utente è on-line o meno) aggiungi anche la funzione time aggiornando quella vecchia:

    Codice PHP:
    $time = time();
    $minuti = "3";
    $scadenza = $time - ($minuti*60);
    mysql_query("UPDATE tabella SET campo = '0' WHERE time<'$scadenza'"); // Setta a 0 gli utenti che si non sono più collegati
    mysql_query("UPDATE tabella SET campo = '1', time = '$time'"); //Setta a 1 gli utenti collegati
    Praticamente questa parte di script fa in modo che se il time() dell'utente è più vecchio del tempo standard considera come se fossero scollegati.
    Nello script fa in modo che gli utenti il cui time() è più vecchio di 3 minuti risultano scollegati.

    Spero sia stato chiaro...senò chiedi pure...

    Dopodichè fai in modo
    Apprezzi l'aiuto? Offrimi un caffè!

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

    Predefinito

    Grazie, ma non ho capito la seconda query:

    (ti spiego quello che ho capito:)
    Prendo i secondi e gli tolgo 3 minuti.
    Quindi, tutti i campi dei collegamenti prima di tre minuti fa li setto a 0.
    Poi:

    Codice:
    mysql_query("UPDATE tabella SET campo = '1', time = '$time'");
    cosa fa questa?
    Non dovrebbe essere più o meno così? :
    Codice:
    mysql_query("UPDATE tabella SET campo = '1', time = '$time' WHERE ip='$ip'");
    Sennò non li cambierebbe TUTTI ?

    Grazie,
    CIAO!

  6. #6
    Ufobm non è connesso Utente attivo
    Data registrazione
    06-12-2004
    Messaggi
    432

    Predefinito

    Beh sì alemoppo penso proprio si riferisca sia sopra che sotto ad un generico campo di un DB utenti... Solo che funziona unicamente per gli utenti registrati da quello che ho capito...

  7. #7
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Grazie, ma non ho capito la seconda query:

    (ti spiego quello che ho capito:)
    Prendo i secondi e gli tolgo 3 minuti.
    Quindi, tutti i campi dei collegamenti prima di tre minuti fa li setto a 0.
    Poi:

    Codice:
    mysql_query("UPDATE tabella SET campo = '1', time = '$time'");
    cosa fa questa?
    Non dovrebbe essere più o meno così? :
    Codice:
    mysql_query("UPDATE tabella SET campo = '1', time = '$time' WHERE ip='$ip'");
    Sennò non li cambierebbe TUTTI ?

    Grazie,
    CIAO!
    Si giusto, il mio è stato solo un piccolo errore di distrazione (forse per l'ora!? boh!)...
    Apprezzi l'aiuto? Offrimi un caffè!

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

    Predefinito

    Grazie!

    Comunque dovrebbe essere più 'giusto' dire "utenti loggati da tre minuti fa" invece che "utenti online"

    Non c'é un modo '''perfetto''' per sapere realmente il numero di visitatori online?
    {a me va benissimo anche questo metodo: ma così per sapere...}

    Grazie,

    CIAO!

    EDIT:
    Solo che funziona unicamente per gli utenti registrati da quello che ho capito...
    Perché ?? Non per forza...

    CIAO!
    Ultima modifica di alemoppo : 26-03-2009 alle ore 17.59.55

  9. #9
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Senti lo script e totalmente personalizzabile, cioè al posto di 3 minuti puoi metterne 1, puoi modificare lo script in modo che conti 1 secondo al posto di 1 minuto...cioè basta poco...secondo te come fanno effettivamente a contare quanti utenti sono on-line chi offre un servizio "utenti on-line"? Utilizza un arco di tempo che varia da 1 minuto a un tot di secondi...quasi tutti utilizzano un arco di tempo differente...
    Apprezzi l'aiuto? Offrimi un caffè!

  10. #10
    Guest

    Predefinito

    Utilizzando un tempo troppo piccolo rischi di classificare come offline un utente che sta (per esempio) leggendo un articolo e che quindi non compie azioni...

    Forse potresti riuscirci con AJAX...

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

    Predefinito

    Esatto: bisognerebbe trovare un compromesso tra un tempo troppo lungo (che rischia di mostrare più utenti di quelli reali) e un tempo troppo corto (che rischia di mostrare meno utenti!)...

    Peccato che ayax ancora non l'ho iniziato per niente

    Grazie a tutti

    CIAO!
    Ultima modifica di alemoppo : 26-03-2009 alle ore 22.13.14

  12. #12
    Ufobm non è connesso Utente attivo
    Data registrazione
    06-12-2004
    Messaggi
    432

    Predefinito

    Ma scusa, non ho capito come farlo funzionare per tutti... Cioè tecnicamente è possibile, ma si creerebbe una riga di db per ogni utente con ip differente? E se uno entra una sola volta e voi mai più...? E' un pò uno spreco... Sempre che abbia capito bene...

  13. #13
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Citazione Originalmente inviato da Ufobm Visualizza messaggio
    Ma scusa, non ho capito come farlo funzionare per tutti... Cioè tecnicamente è possibile, ma si creerebbe una riga di db per ogni utente con ip differente? E se uno entra una sola volta e voi mai più...? E' un pò uno spreco... Sempre che abbia capito bene...
    Beh...al posto di settare 0 all'utente dove il time() è più vecchio di un tot di minuti/secondi esegui una query che elimina l'intera riga no?
    Apprezzi l'aiuto? Offrimi un caffè!

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

    Predefinito

    Sì: si creerebbe una riga ogni visita di IP diverso... (il mio è un PICCOLO sito ).
    Comunque, ad un certo punto si potrebbe resettare tutto oppure CANCELLARE le righe che hanno una data molto vecchia

    EDIT:

    Oggi non ho fatto in tempo a editare:

    (prima cosa che volevo dire che sono stato anticipato )
    Poi volevo chiedere una cosa:

    non è meglio salvare invece che il numerone di secondi, una cosa del tipo: "ore:min:sec" . so ricavarla {con date('H:i:s');} ma se ad esempio faccio:

    Codice:
    $data=date('H:i:s');
    come faccio a sottrarre 3 minuti??
    c'é una funzione che dai secondi {prelevati con time();} mi trasforma in 'H:i:s' ??

    Grazie,

    CIAO!
    Ultima modifica di alemoppo : 27-03-2009 alle ore 22.19.49

  15. #15
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Sì: si creerebbe una riga ogni visita di IP diverso... (il mio è un PICCOLO sito ).
    Comunque, ad un certo punto si potrebbe resettare tutto oppure CANCELLARE le righe che hanno una data molto vecchia
    Citazione Originalmente inviato da miki92 Visualizza messaggio
    Beh...al posto di settare 0 all'utente dove il time() è più vecchio di un tot di minuti/secondi esegui una query che elimina l'intera riga no?


    Lo script che io ho creato è questo:

    Codice PHP:
    $session_limit = "3";
    $time = time();
    $scadenza = $time - ($session_limit*60);
    mysql_query("INSERT INTO tabella(time,ip) VALUES ('$time','$ip')");
    mysql_query("DELETE FROM tabella WHERE sessione<'$scadenza'");
    Capito come funziona? Naturalmente a seconda dell'uso deve venir modificato...questo codice come si può capire serve a calcolare quanti utenti sono attualmente on-line...
    Apprezzi l'aiuto? Offrimi un caffè!

  16. #16
    Guest

    Predefinito

    anche a me servirebbe solo che nn ho capito come funziona...

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

    Predefinito

    @miki92 (ma anche gli altri }: ho editato sopra...

  18. #18
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    EDIT:

    Oggi non ho fatto in tempo a editare:

    (prima cosa che volevo dire che sono stato anticipato )
    Poi volevo chiedere una cosa:

    non è meglio salvare invece che il numerone di secondi, una cosa del tipo: "ore:min:sec" . so ricavarla {con date('H:i:s');} ma se ad esempio faccio:

    Codice:
    $data=date('H:i:s');
    come faccio a sottrarre 3 minuti??
    c'é una funzione che dai secondi {prelevati con time();} mi trasforma in 'H:i:s' ??

    Grazie,

    CIAO!
    Mmm potresti fare:
    Codice PHP:
    $data = date("H:i:s");
    $scandenza = "3";
    $scaduto = date("i")-$scadenza; // Restituirà il numero di 3 minuti fa...cioè se adesso sono le 8:30 restituirà 27.
    if($scaduto != $data_nel_db){
    mysql_query("UPDA...SET ... = '0'...");
    }
    Come puoi ben vedere è una soluzione un po' sporca ma è la prima che mi è venuta in mente...se conosci bene la funzione time() puoi ricavare diverse info...
    Apprezzi l'aiuto? Offrimi un caffè!

  19. #19
    Ufobm non è connesso Utente attivo
    Data registrazione
    06-12-2004
    Messaggi
    432

    Predefinito

    Ok capito... Comunque mi sembra qualcosa di troppo oneroso rispetto al vantaggio effettivo...
    Anche se ovviamente è un'ottima idea di per sé! Ci sono servizi di statistiche che lo fanno free!

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

    Predefinito

    Citazione Originalmente inviato da Ufobm Visualizza messaggio
    Ok capito... Comunque mi sembra qualcosa di troppo oneroso rispetto al vantaggio effettivo...
    Anche se ovviamente è un'ottima idea di per sé! Ci sono servizi di statistiche che lo fanno free!
    Certamente, ma il mio scopo è quello di imparare. Se qualcuno la vuole mettere nel proprio sito, (FORSE), gli conviene prendere un servizio...

    CIAO!

  21. #21
    Ufobm non è connesso Utente attivo
    Data registrazione
    06-12-2004
    Messaggi
    432

    Predefinito

    Sisi infatti ho già detto che come idea è di per sé buona ! Diciamo che è più un esercizio di stile che non uno script utile nella pratica... Secondo me!

Regole di scrittura

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