• User Attivo

    Modificazione del sistema di visualizzazione utenti online

    Ciao a tutti ho un quesito a cui spero di ricevere una risposta:

    ho una chat ( tutta in fogli di testo senza database ) che mi visualizza gli utenti online se hanno scritto un messaggio negli ultimi 60 secondi.

    Io invece voglio che gli utenti siano sempre messi come online da quando fanno il login a quando chiudono la pagina della chat, è possibile fare questo?

    vi posto il file che gestisce gli utenti online spero di ricevere aiuto:

    [php]<html>
    <head>
    <title>Persone online</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script language="javascript">
    function apri(nick_ut)
    {
    window.open("profilo.php?nick=" + nick_ut,nick_ut,"width=500, height=280, left=200");
    }
    </script>
    </head>
    <body bgcolor="#E7E9FA">
    <?
    include("config.php");
    $ar_online=file($file_online);
    $dim=count($ar_online);
    for ($i=0;$i<$dim;$i++)
    {
    $ut_online=chop($ar_online*);
    $utente=explode("|",$ut_online);
    $nick_ut=$utente[0];
    $data=$utente[1];
    $orario=$utente[2];
    $parti_data=explode("/",$data);
    $giorno=$parti_data[0];
    $mese=$parti_data[1];
    $anno=$parti_data[2];
    $parti_orario=explode(":",$orario);
    $ora=$parti_orario[0];
    $minuti=$parti_orario[1];
    $secondi=$parti_orario[2];
    $ts=mktime($ora,$minuti,$secondi,$mese,$giorno,$anno);
    $diff=time()-$ts;
    $min_trascorsi=$diff/60;
    if ($min_trascorsi<$min_online)
    {
    $array_on[]=$nick_ut;
    }
    }
    $ar_unico=array_unique($array_on);
    $dim_unico=count($ar_unico);
    echo "<font face="Verdana" size="1">Online: ";
    for($i=0;$i<count( $array_on);$i++)
    {
    echo $array_on*. ", ";
    }
    ?>
    </body>
    </html>
    [/php]


  • User

    la butto lì (e magari sbaglio)....nell'if, al posto di $min_trascorsi, non ci puoi mettere uno zero?

    non sarà elegantissimo ma...


  • User Attivo

    @ciccio6630 said:

    la butto lì (e magari sbaglio)....nell'if, al posto di $min_trascorsi, non ci puoi mettere uno zero?

    non sarà elegantissimo ma...

    eh ok ma rimane on line per sempre poi poichè non c'è alcun logout, potrebbe anche andare bene ma mi serve una cosa più sicura se qualcuno ha qualche idea ringrazio


  • User Attivo

    mah ho fatto alcune prove ma niente, nessuno sà darmi qualche aiuto su come fare?:?


  • User

    Ciao, il problema non è molto banale, più che altro perchè l'evento di chiusura della finestra è un evento latoclient che non può essere gestito da php, ma
    da un linguaggio appunto lato client come javascript, le cui implementazioni purtroppo variano da browser a browser.
    La funzione javascript che intercetta la chiusura della finestra è window.onclose, che non funziona però nel caso di tab ed in ogni caso ha un comportamento variabile. Se fai uso di sessioni nella tua chat la cosa migliore è lavorare su quelle, altrimenti devi lavorare sui file con javascript, cosa poco affidabile dal punto di vista della sicurezza.


  • User Attivo

    @molto83 said:

    Ciao, il problema non è molto banale, più che altro perchè l'evento di chiusura della finestra è un evento latoclient che non può essere gestito da php, ma
    da un linguaggio appunto lato client come javascript, le cui implementazioni purtroppo variano da browser a browser.
    La funzione javascript che intercetta la chiusura della finestra è window.onclose, che non funziona però nel caso di tab ed in ogni caso ha un comportamento variabile. Se fai uso di sessioni nella tua chat la cosa migliore è lavorare su quelle, altrimenti devi lavorare sui file con javascript, cosa poco affidabile dal punto di vista della sicurezza.

    capisco, cioè capisco ma fin a un certo punto perchè la chat l'ho trovata pronta sul web e quindi si capisce che sono alle prime armi sia con php e sia con java o altro, non so c'è qualche guida su come poter fare una cosa del genere oppure devo ritenere che non potrò mai fare questa cosa? oppure qualcuno che mi aiuti a scriver e buttare giù il codice, aspetto fiducioso.


  • User

    Allora, l'unica soluzione veloce e abbastanza semplice che mi è venuta in mente è stata quella di collegare una funzione all'evento window.onunload.
    Ti riporto il codice sotto
    [php]window.onclose = function() {
    window.open("logout.php", "Grazie per averci scelti", "width=300, height=300, toolbar=no, left=300, top=300, location=no");
    }[/php]Questa funzione in pratica apre un popup nel quale sarà visualizzata la pagina logout.php, nella quale dovrai implementare la cancellazione dell'utente dal file di testo degli online.
    Non è una soluzione molto pulita ed ha qualche difetto dovuto al fatto che in FF l'evento onunload viene generato anche al refresh della pagina, ma è l'unica che mi è venuta in mente 😄


  • User Attivo

    @molto83 said:

    Allora, l'unica soluzione veloce e abbastanza semplice che mi è venuta in mente è stata quella di collegare una funzione all'evento window.onunload.
    Ti riporto il codice sotto
    [php]window.onclose = function() {
    window.open("logout.php", "Grazie per averci scelti", "width=300, height=300, toolbar=no, left=300, top=300, location=no");
    }[/php]Questa funzione in pratica apre un popup nel quale sarà visualizzata la pagina logout.php, nella quale dovrai implementare la cancellazione dell'utente dal file di testo degli online.
    Non è una soluzione molto pulita ed ha qualche difetto dovuto al fatto che in FF l'evento onunload viene generato anche al refresh della pagina, ma è l'unica che mi è venuta in mente 😄

    grazie per il suggerimento, ma io la pagina logout non ce l'ho dovrei scriverla dall'inizio e per me è una impresa colossale, ma agire sul file che ho postato e rendere la cosa accettabile si può? cioè il file attuale mette online chi ha scritto un messaggio negli utlimi 60 secondi dopodichè sparisce dalla lista, ma questa lista si basa appunto sui messaggi inviati quindi se uno nei 60 secondi scrive 4 messaggi mi viene fuori 4 volte il suo nome come faccio a far si che venga scritto una sola volta?


  • User

    Forse non avevo capito bene il tuo problema, allora 🙂

    La soluzione che ho postato elimina dal file quelli che escono dalla chat ...

    Per evitare invece i duplicati, basta inserire un controllo nello script che aggiorna il file, che però qui non c'è 😛