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:
- 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….)
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.