Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: CHI è online php

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    192

    CHI è online php

    Allora ho la necessità di creare un codice che dia i seguenti risultati:
    -Se un determinato utente è online o offline compare una immagine a seconda dello stato (on/off)nel profilo del utente.
    -Visualizzare una lista degli amici online. (Il codice della lista amici e lista dei membri totali ce l'ho, ma devo applicare una ulteriore miglioria appunto sullo stato on/off)
    Come sviluppo il codice?

    Ho trovato solo script già pronti, ma vorrei riuscirci da solo con un piccolo aiuto (via teorica/logica) sulla strada da intraprendere.

    Grazie e buonaserata

  2. #2
    Basta aggiungere un campo numerico alla tabella utenti, esempio "status" e un campo per il timestamp.

    1. Quando l'utente si logga lo flagghi a 1 e aggiungi il suo timestamp.

    2. Sul sito devi avere un controllo sullo status dell'utente, aggiornando di volta in volta il suo timestamp. Quindi su ogni pagina devi avere questo script.

    3. Contestualmente all'update dell'utente cancelli tutti quelli che hanno un timestamp inferiore ai minuti che vuoi (5 minuti va bene).

    Fine
    Perchè uso Maxthon? | Mi piace questa chat

  3. #3
    Ti do questo suggerimento. La cosa mi è venuta in mente al volo dovrai continuare tu sulla strada intrapresa.
    Fai eseguire una query ogni volta che l'utente entra su una pagina del tuo sito, query che andrà ad uppare un campo del database, relativo ad ogni utente e che chiamerò lastaction.
    Tale update consistera semplicemente nel inserire in tale campo il valore time();
    Codice PHP:
    <?php
    $now
    =time();
    $query=mysql_query("UPDATE utenti SET lastaction='$now' WHERE id='$_SESSION[id]'");
    ?>
    Nella pagina di visualizzazione dei profili recupererai questo valore per ogni utente tra i tuoi amici (inner join o doppio while, come meglio credi).
    Dopodichè volendo mostrare gli utenti connessi negli ultimi 15 minuti farai un semplice controllo tra la data estratta e l'attuale data:
    Codice PHP:
    <?php
    $ora
    =time();
    //estrazione dei dati
    $lastaction=$row['lastaction'];
    $diff=$ora-$lastaction;
    if (
    $diff<="900"// i secondi corrispondenti a 15 minuti
    {
    echo 
    "Utente online";
    }else{
    echo 
    "Utente offline";
    }
    A questo punto puoi fare tante personalizzazioni: esempio prendere il valore di $lastaction, dividerlo per 60, arrotondarlo e per esempio applicare un effetto tipo ultima azione eseguita $tot minuti fa dove $tot è il valore che ti sei calcolato.
    Naturalmente il mio è uno spunto, procedi come meglio vuoi.

  4. #4
    Dario "ni",
    è meglio avere un campo "status" dal quale si possa creare un indice facilmente, altrimenti quando devi sapere quanti utenti online ci sono nel sito, si deve scansionare tutta la tbl.
    Perchè uso Maxthon? | Mi piace questa chat

  5. #5
    Originariamente inviato da Bukowski
    Dario "ni",
    è meglio avere un campo "status" dal quale si possa creare un indice facilmente, altrimenti quando devi sapere quanti utenti online ci sono nel sito, si deve scansionare tutta la tbl.
    Mmh, ho letto la tua soluzione, prevede l'inserimento di un campo, e di una query in più (quella che si occupa di "pulire" il campo aggiuntivo) e francamente la trovo utile solo se gli serve il numero, cosa che può evitare secondo me, visto che gli serve un online/offline nei profili, non una pagina in cui si elencano gli utenti online e offline, oppure ho interpretato male la sua richiesta?

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    192
    Le mie richieste erano due.
    -Visualizzare un profilo dove si vedeva la voce online e offline
    -Lista utenti (ho scritto amici, perché dovrò appunto applicare lo script agli amici) online

    Ora prenderò visione dei vostri post e poi vi dirò. Grazie per aver risposto

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    192
    Ho guardato i post e sono arrivato ad una conclusione.
    Funziona di per se (e non lo metto in dubbio), ma ha un unico difetto, non è in tempo reale;
    Mettiamo caso che l'utente A sta facendo un post (sul forum) molto lungo, ed è in quella pagina da più di 5 minuti.
    L'utente B guarda il profilo del utente A e vede che è offline, ma in realtà è online e sta, appunto creando un post molto lungo.
    Questo è solo un esempio.

    Per risolvere ho pensato di utilizzare anche l'ajax. Creare una funzione che viene richiamata ogni qualvolta si digita sulla tastiera, si clicca su qualcosa nella pagina. Questa funzione va a inviare una variabile in una pagina php. Ora tramite il get, se il valore preso sarà "online", invierà un update del timestamp del utente loggato.

    Tramite questa funzione (penso) si possa sapere chi è online in tempo reale.

    Grazie mille del aiuto, mi metto subito al lavoro

  8. #8
    Ciao!

    La funzione session_set_save_handler è quella che fa al caso tuo:
    http://php.net/manual/en/function.se...ve-handler.php
    Andrebbe utilizzata in questo modo:
    1) crei sul DB la tabella sessioni:
    id (char 32 - chiave primaria sessione)
    idUtente (int 11 - chiave esterna tabella utenti)
    dataCreazione (int 11 - secondi)
    2) con le callback "read" e "write" di session_set_save_handler aggiorni dataCreazione
    3) con la callback "destroy" di session_set_save_handler elimini la sessione dal DB
    4) per sapere tutti quelli online ti basta quindi lanciare la query:
    SELECT * FROM Sessioni
    5) questo approccio ti consente inoltre, con l'aiuto di variabili globali, di gestire meglio i permessi degli utenti, di verificare se un utente non si è ancora registrato oppure se la sua sessione è scaduta, ecc.

    Se vuoi puoi seguire la mia discussione (molto simile alla tua):
    http://forum.html.it/forum/showthrea...readid=1487456

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    192
    Grazie mille, ma penso che le risposte postate prima siano piu semplici

  10. #10
    Fai come preferisci
    Ma io rimango dell'idea che la soluzione più semplice rimane la mia, perché ti basta copiare lo script dal manuale PHP , inserirci 4 query contate, e il gioco è fatto! Perché poi lui lavora in back-ground (senza cicli inutili e senza controlli sul tempo, perchè tanto lo fa gia il server, questa è la figata!), e nelle chiamate Ajax ti basta fare SELECT * SESSSIONI!
    Senza contare poi che i provider non ti danno la possibilità di modificare il tempo di durata delle sessioni, quindi fare controlli sul tempo diventa difficile, e in più aggiungendo pochi campi alla tabella Utenti puoi salvarti ad esempio quanto tempo un utente è rimasto loggato nel tuo sito, ecc ecc... tutto sempre e solo con quello script!
    Ti ho convinto di la verità?

    PS Ricordati di non creare troppo chiamate Ajax che non servono a nulla, intasano il server e basta! Dai un'occhiata, per esempio, a come funziona la chat di facebook

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.