PHP - Users Online Script

Language
Hello, if you are developing a web application, you may need this online users script to show how many users is online. Yesterday i wrote a php class for it and decide to share it.

Creating table

Well, Before using this class, you must create a table in your database:
  1. CREATE TABLE `online_users` (
  2.  
  3. `session_id` CHAR(150) NOT NULL,
  4.  
  5. `last_activity` INT(11) NOT NULL DEFAULT '0'
  6.  
  7. );

Creating php file

Next step is create and using 'SA_USERSONLINE' Class! SA_USERSONLINE class:
  1. <?php
  2.  
  3. /*
  4.  * Author : Reza Ramezanpour <[email protected]>
  5.  * Website: http://softafzar.net
  6.  */
  7.  
  8. class SA_USERSONLINE
  9. {
  10.  
  11.     protected $DB_HOST = DB_HOST;
  12.  
  13.     protected $DB_NAME = DB_NAME;
  14.  
  15.     protected $DB_USER = DB_USER;
  16.  
  17.     protected $DB_PWD = DB_PWD;
  18.  
  19.     protected $session_id = null;
  20.  
  21.     protected $time = null;
  22.  
  23.     protected $timeout = 15;
  24.  
  25.     protected $link = null;
  26.  
  27.     protected $stmt = null;
  28.  
  29.     function __construct ()
  30.     {
  31.         session_start();
  32.         $this->session_id = session_id();
  33.         $this->time = time();
  34.         $this->link = mysqli_connect($this->DB_HOST, $this->DB_USER,
  35.                 $this->DB_PWD, $this->DB_NAME);
  36.     }
  37.  
  38.     /**
  39.      * Gets current online users
  40.      */
  41.     function get_online_users ()
  42.     {
  43.         $this->delete_update_onlineusers();
  44.         $this->insert_onlineusers();
  45.         $this->stmt = mysqli_query($this->link,
  46.                 'SELECT session_id FROM online_users');
  47.         return mysqli_num_rows($this->stmt);
  48.     }
  49.  
  50.     private function already_registred ()
  51.     {
  52.         $this->stmt = mysqli_query($this->link,
  53.                 "SELECT session_id FROM online_users WHERE session_id='$this->session_id'");
  54.         if (! $this->stmt || mysqli_num_rows($this->stmt) <= 0)
  55.             return false;
  56.         return true;
  57.     }
  58.  
  59.     private function insert_onlineusers ()
  60.     {
  61.         if (! $this->already_registred()) {
  62.             mysqli_query($this->link,
  63.                     "INSERT INTO online_users VALUES('$this->session_id',$this->time)");
  64.         }
  65.     }
  66.  
  67.     private function delete_update_onlineusers ()
  68.     {
  69.         $timeout = $this->time - ($this->timeout * 60);
  70.         mysqli_query($this->link,
  71.                 "DELETE FROM online_users WHERE last_activity<=$timeout");
  72.         mysqli_query($this->link,
  73.                 "UPDATE online_users SET last_activity=$this->time WHERE session_id='$this->session_id'");
  74.     }
  75.  
  76.     /**
  77.      * Set timeout in minutes.
  78.      *
  79.      * @param int $timeout            
  80.      */
  81.     function set_timeout ($timeout)
  82.     {
  83.         $this->timeout = ((int) $timeout);
  84.     }
  85. }
  86.  
  87. ?>
Example usage:
  1. $usersOnline = new SA_USERSONLINE();
  2. echo 'Online users: ', $usersOnline->get_online_users();
Also, You can customize session timeout(in minutes): $usersOnline->set_timeout(15); NOTE: If database connection is already established, You should remove lines 34 and 35:
  1.         $this->link = mysqli_connect($this->DB_HOST, $this->DB_USER,
  2.                 $this->DB_PWD, $this->DB_NAME);
Original tutorial here : http://softafzar.net/thread1717.html .

Note: Due to the size or complexity of this submission, the author has submitted it as a .zip file to shorten your download time. After downloading it, you will need a program like Winzip to decompress it.

Virus note: All files are scanned once-a-day by SourceCodester.com for viruses, but new viruses come out every day, so no prevention program can catch 100% of them.

FOR YOUR OWN SAFETY, PLEASE:

1. Re-scan downloaded files using your personal virus checker before using it.
2. NEVER, EVER run compiled files (.exe's, .ocx's, .dll's etc.)--only run source code.

Comments

Thanks for sharing. very useful ;)

Add new comment