Được gửi bởi
libraciter
Đọc hết các bài thì thấy phần đếm số lượt truy cập đã được mọi người cải tiến rất nhiều. Mình cũng học hỏi được nhiều.
Nhưng để đếm số thành viên online của trang web hay số lượng khách của trang web trong 1 thời điểm thì làm sao? Tại vì khi tắt browser thì session sẽ bị mất nhưng làm sao để bắt được sự kiện đó để cập nhật lại số thành viên/khách online?
Trả lời từng câu hỏi của bạn:
1. Đếm số thành viên online: tương đối ... không khó: bạn gán thêm một field status vào table user để ám chỉ trạng thái thành viên(boolean ấy). Khi cần lấy số thành viên online thì SELECT các thành viên có status='true' rồi đếm COUNT của nó. Khi cần lấy tên thành viên đang online thì cũng như trên nhưng thay vì đếm COUNT ta lấy username.
2. Đếm số khách đang truy cập: Bạn cần có 1 table mới (giả sử mình đặt tên là useronline) trong đó gồm các fields chính như: timestamp, ip ngoài ra còn có thể thêm 1 fields file để xác định user đó đang xem file hoặc thư mục nào trong website cũng được.
Sau một khoản thời gian mặc định (5" chẳng hạn) bạn cập nhật table bằng cách delete các dòng rồi insert các dòng mới phân biệt nhau bằng IP(khóa chính), cập nhật thêm các thông số kia nữa là xong.
Bạn có thể xem ví dụ dưới đây:
Tạo bảng :
PHP Code:
CREATE TABLE `usersonline` (
`timestamp` int(15) NOT NULL default '0',
`ip` varchar(40) NOT NULL default '',
`file` varchar(100) NOT NULL default '',
KEY `timestamp` (`timestamp`),
KEY `ip` (`ip`),
KEY `file` (`file`)
) ;
Tạo một file online.php với code sau:
PHP Code:
<?php
class UsersOnline {
var $timeoutSeconds = 300;//Đây là thời gian refresh tính bằng giây
var $numberOfUsers = 1;//mặc định số người truy cập(ít nhất là 1 người đang xem - chính là bạn đó ^_^)
function UsersOnline() {
$this->refresh();
}
function getnumberOfUsers() {
return $this->numberOfUsers;
}
function printNumber() {
if($this->numberOfUsers == 1) {
echo "1 người đang truy cập.";
} else {
echo "$this->numberOfUsers người đang trực tuyến";
}
}
function refresh() {
global $data;
$currentTime = time();
$timeout = $currentTime - $this->timeoutSeconds;
$allow=true;
$query=$data->query("SELECT ip FROM usersonline");
while($row=$data->fetch_array($query))
{
if($_SERVER***91;'REMOTE_ADDR'***93;==$row***91;"ip"***93;)
$allow = false;
}
if($allow)
{
$query=$data->query("INSERT INTO usersonline VALUES ('$currentTime','".$_SERVER***91;'REMOTE_ADDR'***93;."','$PHP_SELF')");
}
$query=$data->query("DELETE FROM usersonline WHERE timestamp < $timeout");
$query=$data->query("SELECT ip FROM usersonline");
$this->numberOfUsers = $data->num_row($query);
}
}
$ol = new UsersOnline();
$ol->printNumber();
?>
Như vậy, tại nơi cần hiển thị bạn gọi file online.php là xong.
Phần kết nối cơ sở dữ liệu bạn tự thực hiện nhé
Bookmarks