Skip to main content

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. $this->session_id = session_id();
  32. $this->time = time();
  33. $this->link = mysqli_connect($this->DB_HOST, $this->DB_USER,
  34. $this->DB_PWD, $this->DB_NAME);
  35. }
  36.  
  37. /**
  38.   * Gets current online users
  39.   */
  40. function get_online_users ()
  41. {
  42. $this->delete_update_onlineusers();
  43. $this->insert_onlineusers();
  44. $this->stmt = mysqli_query($this->link,
  45. 'SELECT session_id FROM online_users');
  46. return mysqli_num_rows($this->stmt);
  47. }
  48.  
  49. private function already_registred ()
  50. {
  51. $this->stmt = mysqli_query($this->link,
  52. "SELECT session_id FROM online_users WHERE session_id='$this->session_id'");
  53. if (! $this->stmt || mysqli_num_rows($this->stmt) <= 0)
  54. return false;
  55. return true;
  56. }
  57.  
  58. private function insert_onlineusers ()
  59. {
  60. if (! $this->already_registred()) {
  61. mysqli_query($this->link,
  62. "INSERT INTO online_users VALUES('$this->session_id',$this->time)");
  63. }
  64. }
  65.  
  66. private function delete_update_onlineusers ()
  67. {
  68. $timeout = $this->time - ($this->timeout * 60);
  69. mysqli_query($this->link,
  70. "DELETE FROM online_users WHERE last_activity<=$timeout");
  71. mysqli_query($this->link,
  72. "UPDATE online_users SET last_activity=$this->time WHERE session_id='$this->session_id'");
  73. }
  74.  
  75. /**
  76.   * Set timeout in minutes.
  77.   *
  78.   * @param int $timeout
  79.   */
  80. function set_timeout ($timeout)
  81. {
  82. $this->timeout = ((int) $timeout);
  83. }
  84. }
  85.  
  86. ?>

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

Submitted byMatthew (not verified)on Tue, 01/14/2014 - 21:16

Thanks for sharing. very useful ;)

Add new comment

CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.