NHANWEB

Thiết kế ứng dụng đếm số người đang online (Online User)

Cũng lâu rồi chưa có bài viết trong mục PHP này nên thôi làm 1 bài viết đơn giản giành cho các bạn mới làm quen với PHP cùng nghiên cứu và học tập. Bài này đơn giản chúng ta chỉ viết một bộ đếm nhằm xác định trên website hiện nay có bao nhiều người đang theo dõi và họ đang xem những file nào trên hệ thống.

Để làm việc này trước hết chúng ta cần có một cơ sở dữ liệu lưu trữ các user đang online. Hệ thống lưu trữ này lưu trữ thông tin thành viên theo IP truy cập và có khóa chính là thời điểm người dùng được cập nhật vào danh sách và có dạng timestamp. Chúng ta tạo table ndn_useronline như sau:

CREATE TABLE `ndn_useronline` (
  `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `ip` varchar(40) default NULL,
  `url` varchar(100) default NULL,
  PRIMARY KEY  (`timestamp`)
)

Chú thích một tí cho table vừa tạo đối với các bạn mới tập code:

Okie ! :D Tạm thời nói về Database của nó nhiêu đó thôi vì mình muốn phát triển một ứng dụng riêng lẻ cho dễ hiểu, sau này các bạn có điều kiện thì kết hợp nó vào một code lớn hơn.

Tiếp theo là Class:

numberOfUsers;
    }

    function refresh() {
		global $DB;

		$currentTime = time();
        $timeout = $currentTime - $this->timeoutSeconds;
        $allow=true;
        $sql = $DB->query("SELECT * FROM ".$DB->db_prefix.$this->tableName);
        if($DB->num_rows($sql)>0){
			while($row = $DB->fetch_array($sql))
			{
					if($_SERVER['REMOTE_ADDR']==$row["ip"])
						$allow = false;
			}

		}
		if($allow)
			{
				$this->timestamp = $currentTime;
				$this->ip = $_SERVER['REMOTE_ADDR'];
				$sql = $DB->query("INSERT INTO ".$DB->db_prefix.$this->tableName."(timestamp, ip) VALUES('$this->timestamp', '$this->ip')");
			}
		//Delete cac user timeout

		$sql = $DB->query("DELETE FROM ".$DB->db_prefix.$this->tableName." WHERE timestamp < $timeout"); 		 		//Lay so luong user hien tai 		 $sql = $DB->query("SELECT * FROM ".$DB->db_prefix.$this->tableName);
		 $this->numberOfUsers  = $DB->num_rows($sql);
      }
}
?>

Phần kết nối DB thì các bạn tự xử nhé.

Sử dụng như sau:

Khai báo và kích hoạt cập nhật lại danh sách User đang online

// Lay so luong nguoi dang online
	$onlineUsers = new UsersOnline;
	$onlineUsers->refresh();

Lấy số lượng User đang online:

$onlineUsers->getnumberOfUsers()

Muốn kiểm tra các User đang làm gì thì đơn giản là bạn duyệt từng record và xem URL là xong.

Exit mobile version