Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Numero di utenti connessi

    Ciao a tutti,
    mi serve un'indicazione. Qual è il principio di funzionamento per il quale su una pagina (per esempio di un forum) si può dire quante persone sono connesse in quel momento?

    Credo che sia qualcosa di molto semplice, ma non riesco a pensare da me ad una soluzione passabile...

    Grazie!
    La sola schiettezza naturale non basta, bisogna considerare come la interpreterà l'altro (J. Gray)

  2. #2
    Utente di HTML.it L'avatar di semolino
    Registrato dal
    Nov 2004
    Messaggi
    1,499
    Un metodo può essere, ad esempio, fare in modo che mentre l'utente è connesso, imposta nel database un campo =true e quindi conta quanti sono in quello stato.
    Oppure contare le sessioni attive in quel momento.
    Credo che ci siano molti modi forse anche più semplici

  3. #3
    Nella prima ipotesi non saprei come riportare il valore del campo del DB a false nella chiusura sessione.

    Lo si potrebbe fare facilmente se l'utente passasse attraverso una pagina di logout, ma come sai nessuno perde il tempo di caricamento di una pagina per uscire, quando invece può premere velocemente quella bella X rossa in alto a dx...

    Nel secondo caso intendi dire che c'è un sistema per leggere il file delle sessioni sul server? E qual è?
    La sola schiettezza naturale non basta, bisogna considerare come la interpreterà l'altro (J. Gray)

  4. #4
    dai una occhiata a sta classe semplice da usare :

    Codice PHP:
    <?php
    /*
    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() {
            
    $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() {
            
    $count mysql_num_rows mysql_query("SELECT DISTINCT ip FROM useronline"));
            return 
    $count;
        }

    }
    ?>

  5. #5
    La proverò, grazie!
    La sola schiettezza naturale non basta, bisogna considerare come la interpreterà l'altro (J. Gray)

  6. #6

    OK, siete tutti bravi, ma...

    non mi è molto chiaro come usare questo script
    ho un server 2003 con PHP 4.0, Mysql configurati su IIS 6.0 e non soi come inserire questo script.
    non sono bravo con il Php
    Fare....o NON fare...non c'è tentare!
    YODA

  7. #7

    Soluzione più breve (leggera?)

    Guarda, anch'io stavo cercando qualcosa di più leggero, non ho ancora provato ad implementare la classe suggerita da Stefano ma a occhio mi sembra un po' lunga e quindi pesante.
    In più devo metterla in una serie di pagine che già ora non sono proprio velocissime...

    Se ti può interesare ho trovato questo script, http://freephp.html.it/script/view_script.asp?id=31 di una trentina di righe. Certo ha 4/5 query mentre questa qui ne ha solo 3 quindi è tutto da vedere.
    Si può monitorare il tutto con un microtime() prima e dopo le routine, e se riesco misuro entrambi gli script.
    La sola schiettezza naturale non basta, bisogna considerare come la interpreterà l'altro (J. Gray)

  8. #8
    la classe è leggerissima

  9. #9
    Finalmente ho capito il principio di funzionamento di questi script "users online"!

    Se un utente visita una pagina, viene lanciata una query che salva sul DB l'id della sessione e il timestamp dell'apertura.
    Se in quel momento nella tabella del DB ci sono record di altre sessioni più vecchie di n secondi, con l'occasione vengono cancellate.
    La parte di pagina php incaricata al conteggio di utenti non fa altro che contare gli id di sessione il cui timestamp sia maggiore di NOW - la durata media stabilita arbitrariamente per la visita di una pagina!!!!!!!!!

    E tutto qua era il casino......?!?!?!??

    Che roba, io pensavo che ci fosse un sistema diverso che definisse il timeout di conteggio di un visitatore... Ma così diventa tutto semplicissimo. E' tutto deciso a braccio.
    Brutto che non si trovino spiegati i meccanismi base...
    La sola schiettezza naturale non basta, bisogna considerare come la interpreterà l'altro (J. Gray)

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.