Gå til innhold

Script: Hvor mange er online/leser på siden?


Anbefalte innlegg

Videoannonse
Annonse

det finnes ikke noe enkelt skript for det.

 

I prinsipp er det nesten aldri noen på siden din. Idet man trykker linken og har hentet ned siden, kan du umulig vite om de sitter med siden oppe eller om de har lukket den eller surfet videre.

 

du kan legge inn en slags log i en mysqltabell for hvert hit, og kombinert med en cookie kan du kanskje telle antall unike besøkere siste 5 minutene. f.eks.

 

kanskje du finner noe på www.hotscripts.com

Lenke til kommentar

som Torbjørn sier finnes det ikke noen måte å sjekke hvor mange som er på siden din akkurat når du er der, men du kan ved hjelp cookie eller session sjekke opp i mot enten en flatfil eller en db hvor mange som har vært innom iløpet av f.eks de siste 5 minuttene...

 

jeg brukte en gang i tiden denne class'en til å sjekke det på en side:

<?php
class UsersOnline {

/*
$ol = new UsersOnline;
//REPORTING ONLY
$ol = new UsersOnline(false);
//get rid of the old records
$ol->refresh();
//who is at my site?
$ol->printNumber("site");
//who is at this page?
$ol->printNumber("?s=");
//ADDING A USER, NO REPORTING
$ol = new UsersOnline(true);
*/

   var $db;
   var $page = "";
   var $ip = "";
   var $timeoutSeconds = 120;
   
   function UsersOnline($visitor=true){
       $this->db = new db;
       $this->ip = getip();
       $this->page = $_SERVER['PHP_SELF'];
       if ($visitor) $this->addVisitor();
   }//constructor
   
   function getNumber($siteOrFile="site"){
       $timeout = $this->getTimeOut();
       if ($siteOrFile == "site"){
           $query = "SELECT DISTINCT ip FROM usersonline WHERE timestamp >= $timeout";
         }else{
           $query = "SELECT DISTINCT ip FROM usersonline WHERE file='" . $this->page . "' and  timestamp >= $timeout";
       }
       if(!$result = $this->db->db_query($query)){
           array_push($this->db->drift_errarr, mysql_error());
                     echo errarr($this->db->drift_errarr);
       }
       return $this->db->db_numrows($result);
   }//getNumber
   
       function printNumber($siteOrFile="site"){
       echo $this->getNumberInfo($siteOrFile);
       }//printNumber
   
       function getNumberInfo($siteOrFile="site"){
         // I use templates so I just want to get the string and pass it to
         // my template object
         $cnt = $this->getNumber($siteOrFile);
             if( $cnt == 1){
                    $output = "$cnt Bruker på siden";
             }else{
                    $output = "$cnt Brukere på siden";
       }
       return $output;
   }//getNumberInfo
   
   
   function refresh() {
       global $REMOTE_ADDR, $PHP_SELF;
               $timeout = $this->getTimeOut();
       $query = "DELETE FROM usersonline WHERE timestamp < $timeout";
       if(!$result = $this->db->db_query($query)){
           array_push($this->db->drift_errarr, mysql_error());
                     echo errarr($this->db->drift_errarr);
       }
       }//refresh
   
   function getTimeOut(){
               $currentTime = time();
               return $currentTime - $this->timeoutSeconds;      
   }//getTimeOut
   
   function addVisitor(){
               global $REMOTE_ADDR, $PHP_SELF;
               $currentTime = time();
               $query = "INSERT INTO usersonline VALUES ('$currentTime','" . $this->ip . "','" . $this->page . "')";
       if(!$result = $this->db->db_query($query)){
           array_push($this->db->drift_errarr, mysql_error());
                     echo errarr($this->db->drift_errarr);
       }
        }//addVisitor
}//class UsersOnline
?> 

 

den krever class.db.php

<?php

class db {

   var $db_type;
   var $db_server;
   var $db_name;
   var $db_user;
   var $db_pass;
   var $db_persistent;
   var $dbh;
   var $drift_errarr;

   function db() {
       $this->db_type = 1;
       $this->db_server = 'localhost';
               $this->db_name = 'online';
               $this->db_user = 'root';
               $this->db_pass = 'xxxXXXxxx';
               $this->db_persistent = 0;
                    $this->db_connect();
           } //end constructor

       function db_connect () {
       // mySQL
       $this->drift_errarr = array();
       if($this->db_type == 1) {
                       if ($this->db_persistent)
                           $this->dbh = @mysql_pconnect($this->db_server, $this->db_user, $this->db_pass);
                       else
                           $this->dbh = @mysql_connect($this->db_server, $this->db_user, $this->db_pass);

                       if (!$this->dbh) {
                           array_push($this->drift_errarr,mysql_error());
               echo errarr($this->drift_errarr);
                           return;
                       }

                       if (!@mysql_select_db($this->db_name, $this->dbh)) {
                            array_push($this->drift_errarr,mysql_error());
               echo errarr($this->drift_errarr);
                           return;
                      }

       } //end mySQL
   } //end db_connect()

   function db_query ($query) {
       // mySQL
       $this->drift_errarr = array();
       if($this->db_type == 1) {
                       $result = mysql_query($query, $this->dbh);
           if(!$result){
                 array_push($this->drift_errarr,mysql_error());
               echo errarr($this->drift_errarr);
                           return;
                       }
                       return $result;
               } //end mySQL
       } //end db_query()

       function db_numrows ($result) {
       switch($this->db_type) {
                       case 1: //mySQL
                           return mysql_num_rows($result);
       } //end switch
       } // end db_numrows()

       function db_fetch_array (&$result) {
       switch($this->db_type) {
                       case 1: //mySQL
                           return mysql_fetch_array($result);
               } //end switch
       } //end db_fetch_array()

} //end class db

?> 

 

og en tabell i db din med :

 

id int(10) No auto_increment

ip varchar(15) No

timestamp varchar(15) No

page varchar(255) No

Lenke til kommentar

Om man ikke deler sessionkatalog med noen andre (som er ganske vanlig hos gratishoster og enkelte betalingshoster) kan man telle antall sessionfiler. Om man f.eks setter levetiden til en session til fem minutter, så kan man telle antall sessionfiler og dermed anta hvor mange som har besøkt siden de siste fem minuttene.

 

www.sindrem.com skal ha et liknede eksempel på siden sin.

Lenke til kommentar

Den vanligste måten å finne besøkende tipper eg er med "database session", og deretter telle opp aktive sessions. I.e. du forandrer dei innebygde session commandoene til å bruke ein database istedenfor den vanlige lagrings plassen.

 

Ein til fordel med denne måten er at du lettere kan forhindre session exploits.

Lenke til kommentar

Man trenger ikke sessions eller egene session handlers for å telle antall besøkende på en side - bare lag en teller som lagrer side som vises, ip og annen data du ønsker. Så teller du bare forskjellige ipadresser f.eks. de siste 5 minuttene. Etterhvert kan du beregne tiden en side vises (hvis du har f.eks. et timestamp felt) så kan du bruke den tiden isteden for 5 minutter.

 

Bygger man en litt seriøs side vil man jo gjerne ha en teller for å vite hvor mange som besøker siden og hvor mange sider som vises, så det er bare å bruke den.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...