Lập trình ứng dụng đếm số người đang trực tuyến (Module User Online)

Bài hôm nay như một bài thực hành php đơn giản, chúng ta sẽ 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 mục 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 CSDL 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 bảng dn_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:

  • Trường timestamp: lưu lại thời điểm cập nhật user này. Nó có tác dụng kiểm tra user đã đăng nhập vào bao lâu trong hệ thống. Cũng từ thời điểm này, chúng ta có thể update lại danh sách các user online theo thời gian chỉ định.
  • Trường IP: Lưu lại IP của user đăng nhập. Giúp xác định user nào đó đã được cộng chưa, nếu chưa được cộng chúng ta tiến hành thêm User đó vào danh sách các User đang online.
  • Trường url : Lưu lại đường dẫn mà User đó đang sử dụng nhằm xác định hành động của User (ví dụ: đang đọc bài, đang download, đang….)

Tạm thời nói về CSDL của nó từng đó thôi vì mình muốn phát triển một ứng dụng riêng 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 1 bộ mã 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 CSDL 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 người đ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.

FOLLOW US

Leave a Reply

Your email address will not be published. Required fields are marked *