Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Utente Online

  1. #1

    Utente Online

    Buongiorno a tutti,
    sto creando un applicativo in PHP e vorrei che gli utenti registrati che entrano nell'area riservata vedano chi è online/offline.

    Avevo pensato ad un controllo del DATETIME sul db mysql al logoff di un utente, ma non riesco a trovare un sistema inteligente...


    C'è qualcuno che mi può aiutare?

    grazie infinite


  2. #2
    E' un problema che ho affrontato anche io in un caso simile.. anche se nel mio caso si è trattato più di un esperimento che di altro visto che la funzione di controllo degli utenti online non mi serviva poi a tanto.

    Come metodo è piuttosto grezzo ed ampiamente perfettibile, ma te lo espongo uguale.

    In due parole, ho creato una tabella che potremmo chiamare "users_online" ed un controllino incluso in una pagina auto-aggiornante in un frame invisibile. Al login la pagina che da l'accesso scrive nomeutente e timestamp del momento dell'ingresso nella tabella... mentre il controllino della pagina che si auto-aggiorna non fa altro che fare la stessa cosa ad ogni apertura di una nuova pagina e/o controllare che quell'utente sia ancora online mediante una verifica sulla differenza (quanta può essere al massimo prima che il visitatore sia considerato offline lo puoi ovviamente impostare tu) tra il timestamp e quello salvato in tabella. Per l'elenco dei visitatori online non ci vuole altro che una semplice query sulla suddetta tabella. Ovviamente, la pagina di logout dovrebbe includere una funzione di cancellazione dei dati relativi a quella sessione.

    Purtroppo non ho sottomano il codice da postarti, ma spero di essere stato sufficientemente chiaro e/o quantomeno averti fornito un'idea per risolvere il tuo problema

  3. #3
    PROVA STA CLASSE:
    Codice PHP:
    <?php

        
    include "config.php";
    $db mysql_connect("$server""$username""$password");
    mysql_select_db("$database",$db);
    /*
    usersOnline.php
    Author: Ilir Fekaj
    Contact: [email]tebrino@hotmail.com[/email]
    Date: December 21, 2003
    Latest version & info: [url]http://www.free-midi.org/scripts/[/url]
    Demo: [url]http://www.free-midi.org[/url]

    This very simple class enables you to track number of visitors online in
    an easy and accurate manner. It's free for all purposes, just please don't
    claim you wrote it. If you have any problems, please feel free to contact me.
    Also if you use it, please send me the page URL.

    Example usage:

    include_once ("usersOnline.class.php");
    $visitors_online = new usersOnline();

    if ($visitors_online->count_users() == 1) {
        echo "There is " . $visitors_online->count_users() . " visitor online";
    }
    else {
        echo "There are " . $visitors_online->count_users() . " visitors online";
    }

    Important: You need to create database connection and select database before creating object!
    --------------------------------------------
    Table structure:
    CREATE TABLE `useronline` (
      `id` int(10) NOT NULL auto_increment,
      `ip` varchar(15) NOT NULL default '',
      `timestamp` varchar(15) NOT NULL default '',
      PRIMARY KEY (`id`),
      UNIQUE KEY `id`(`id`)
    ) TYPE=MyISAM COMMENT='' AUTO_INCREMENT=1 ;

    */

    class usersOnline {

        var 
    $timeout 600;
        var 
    $count 0;
        
        function 
    usersOnline () {
            
    $this->timestamp time();
            
    $this->ip $this->ipCheck();
            
    $this->new_user();
            
    $this->delete_user();
            
    $this->count_users();
        }
        
        function 
    ipCheck() {
        
    /*
        This function checks if user is coming behind proxy server. Why is this important?
        If you have high traffic web site, it might happen that you receive lot of traffic
        from the same proxy server (like AOL). In that case, the script would count them all as 1 user.
        This function tryes to get real IP address.
        Note that getenv() function doesn't work when PHP is running as ISAPI module
        */
            
    if (getenv('HTTP_CLIENT_IP')) {
                
    $ip getenv('HTTP_CLIENT_IP');
            }
            elseif (
    getenv('HTTP_X_FORWARDED_FOR')) {
                
    $ip getenv('HTTP_X_FORWARDED_FOR');
            }
            elseif (
    getenv('HTTP_X_FORWARDED')) {
                
    $ip getenv('HTTP_X_FORWARDED');
            }
            elseif (
    getenv('HTTP_FORWARDED_FOR')) {
                
    $ip getenv('HTTP_FORWARDED_FOR');
            }
            elseif (
    getenv('HTTP_FORWARDED')) {
                
    $ip getenv('HTTP_FORWARDED');
            }
            else {
                
    $ip $_SERVER['REMOTE_ADDR'];
            }
            return 
    $ip;
        }
        
        function 
    new_user() {
        if(
    $_COOKIE["Gustandouser"]!=""){$utente $_COOKIE[Gustandouser];}
        if(
    $_COOKIE["Gustandouser"]==""){$utente 'Ospite';}
        
    $dovesei "$_SERVER[PHP_SELF]?$_SERVER[QUERY_STRING]";
            
    $insert mysql_query ("INSERT INTO useronline(timestamp, ip) VALUES ('$this->timestamp', '$this->ip')");
        }
        
        function 
    delete_user() {
            
    $delete mysql_query ("DELETE FROM useronline WHERE timestamp < ($this->timestamp - $this->timeout)");
        }
        
        function 
    count_users() {
        


    $useronline = ("SELECT DISTINCT ip FROM useronline");
      
    $exec_useronline mysql_query($useronline) Or DIE (mysql_error());
      
    $count mysql_num_rows($exec_useronline);
              return 
    $count;
        }
          }

    ?>

  4. #4
    beh ... magari funziona ma getenv non sempre va ed in piu' non sfrutta l' update delle tabelle ma fa sempre e comunque un insert con duplicati di IP inutili che appesantiscono tabella e ricerca ( clausola DISTINCT ) .


    Vedi se riesci a prendere qualche spunto da questa:
    http://www.devpro.it/php5_id_63.html

    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    Sono appena tornato alla postazione.
    Vi ringrazio molto per le risposte, adesso le leggerò con calma una ad una.

    Per AVRstudio -> Ottima idea per realizzare il tutto. Integrerò al limite anche qualche codice DHTML per evitare che gli utenti possano chiudere il browser senza il logout. Però non ho sotto mano il codice che permette periodicamente di fare il check sul database per vedere se l'utente è online. Puoi postarmi solo quello?

    grazie ancora


  6. #6
    Purtroppo non ho proprio quel codice, perchè lo utilizzai tempo fa per uno script realizzato per studio ed in una formattazione l'ho sbadatamente perso



    Il principio comunque è quello di creare un frameset con un frame contenenti le pagine vere e proprie "di servizio" del sito, ed un altro di larghezza 1px (per farlo nascosto) e metterci dentro una pagina che:

    1) si autorefresha ogni, che so, 5 minuti. Potresti usare la funzione header() oppure il tag <META> come feci io all'epoca.. la differenza fondamentale, in linea di massima, tra le due è che la prima non funziona se hai mandato anche solo uno spazio di output alla pagina, l'altra funziona sempre, anche in fondo ad una pagina piena.

    2) Che aggiorna, con una query UPDATE, il timestamp relativo al tuo nomeutente (che dovrai passargli in qualche modo, ma quello dipende da come hai strutturato tu la tua area riservata)

    3) Che fa una query SELECT sulla tabella "users_online" andando a ripescare i dati sull'ultimo timestamp di tutti gli utenti e che successivamente leva dalla tabella tutte quelle entries dove la differenza tra il timestamp salvato e quello attuale è maggiore di TOT (impostato da te)

    4) Inserendo poi una semplice condizione IF puoi fare in modo che da quella pagina, se il nome del tuo utente è tra quelli cancellati (si presuppone per prolungata inattività), lo script reindirizzi alla pagina di logout.


    Ovviamente, come già detto, si tratta di un metodo ampiamente perfettibile (si potrebbe per esempio implementare un controllo anche sull'IP address) con qualche difettuccio che credo si possa comunque arginare. Per quello che serviva a me andava abbastanza bene

    PS: Con questo sistema, visto che la "pulizia" viene effettuata in un momento successivo, se per caso l'ultimo utente della giornata (ipotetico) chiude il browser senza fare logout il suo nome risulterà online fino al primo ingresso successivo... dove verrà comunque cancellato ^_*

  7. #7
    Comunque figurati, di nulla ^_*

  8. #8
    Originariamente inviato da AVRstudio
    Comunque figurati, di nulla ^_*
    Grazie mille ancora.
    Metto in atto e ti faccio sapere.


  9. #9
    Figurati, attendo ansioso ^_*

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.