10/10/2018, 11:03
script PHP đếm số người đang online ?
Có ai biết script PHP nào đếm số người đang online trên trang của mình không ?, Làm ơn chỉ tôi !!!!!
Bài liên quan
id -> PRIMARY KEY nó.
s_time -> thời gian
s_id -> hàm session_id();
mình post luôn cái table này:
CREATE TABLE `stats`
(
`id` int(11) unsigned NOT NULL auto_increment,
`s_time` int(10) NOT NULL,
`s_id` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=129 ;
<?
// Thong tin MySQL, cai nay chac khoi can noi
$server = 'localhost'; // MySQL server
$username = 'username'; // MySQL username
$password = 'password'; // MySQL password
$database = 'stats'; // MySQL database
// ket noi co so du lieu
$connect = mysql_connect("$server", "$username", "$password");
if (!$connect)
{
die("Khong the ket noi den server" . mysql_error());
}
// chon co so du lieu lam viec
mysql_select_db("$database", $connect);
session_start(); // Khoi dong session
$s_id = session_id(); // Bien s_id
$time = time(); // Lay thoi gian hien tai
$time_secs = 3; // Thoi gian tinh bang seconds de delete & insert cai $s_id moi, test tren localhost thi cho no bang 3 seconds de nhanh thay ket qua, chạy trên host thì để 900 = 15 phút là vừa
$time_out = $time - $time_secs; // Lay thoi gian hien tai
@mysql_query("DELETE FROM stats WHERE s_time < '$time_out'"); // Delete tat ca nhung rows trong khoang thoi gian qui dinh san
@mysql_query("DELETE FROM stats WHERE s_id = '$s_id'"); // Delete cai $s_id cua chinh thang nay
@mysql_query("INSERT INTO stats (s_id, s_time) VALUES ('$s_id', '$time')"); // Delete no xong lai insert chinh no
$user_online = @mysql_num_rows(@mysql_query("SELECT id FROM stats")); // Dem so dong trong table stats, chinh la so nguoi dang online
// Them 1 cai, xem page nay da duoc mo bao nhieu lan:
list($page_visited) = @mysql_fetch_array(@mysql_query("SELECT MAX(id) FROM stats"));
// Xong rui, cho no ra thui
echo "Online: <b>".$user_online."</b><br>";
echo "Trang nay duoc mo: <b>".$page_visited."</b> lan";
?>
Note: http://igame.vn/f/showthread.php?t=413 <- post lên thấy nó, lại kiểu ads mới của DDTH à?
có khi nào bạn vào 1 site 2 tab cùng 1 brower ???
Các source-code & ý tưởng của các bạn đã nêu ở trên cũng khá ổn nhưng đều gặp phải một vấn đề đó là phải tốn nhiều query (tối thiểu 2 query cho mỗi lần trang được gọi) -> tốc độ bị chậm, không những thế - vấn đề inefficient cũng ko thể giải quyết triệt để.
Search internet thì thấy có SRM (Script Running Machine - http://www.vl-srm.net) là một project để phát triển một PHP extension để giải quyết vấn đề xử lý trạng thái không được công nhận của giao thức HTTP (statelessness of the HTTP protocol) - cụ thể một vấn đề của nó là làm sao để đếm số người online trong hệ thống - xem tại http://talks.php.net/show/srm-montreal/10. Buồn là từ lúc ý tưởng được đề ra (năm 2000) cho đến giờ nó vẫn chưa có bản stable .
=> Túm lại là vẫn chưa có cách giải quyết nào khả thi - ko biết có bác nào có cách giải quyết triệt để ko nhỉ???
1) Nếu một người dùng mở nhiều Tab hoặc Windows của cùng một trình duyệt khi vào một site / trang (cụ thể là trang ta tính người online) => khả năng PHP đếm làm nhiều người. Nếu PHP phân biệt được khi cùng trình duyệt => dùng 2 trình duyệt khác nhau nó sẽ cũng đếm làm nhiều người.
2) Nếu ta dùng PHP và đếm IP mà loại trừ để 1 IP chỉ tính một người cũng sẽ không ổn. Vì sao? Trường hợp nhiều người cùng một mạng LAN vào trang web của ta thì sao? Họ là nhiều người đấy chứ.
Đó là chưa kể bây giờ có nhiều con bots / nhện của các máy tìm kiếm thường xuyên càn quét qua, ta cũng sẽ đếm những con này là một người truy cập.
Do đó, nếu người dùng không đăng nhập, chỉ là khách viếng thăm thì độ chính xác chỉ là tương đối. Có đúng vậy không mọi người? Không rõ các scrip dạng diễn đàn thông dụng như vBB, phpBB, IPB giải quyết việc này như thế nào nhỉ?
Để mà viết PHP giải quyết được rốt ráo các vấn đề vừa nêu có thể đủ để làm một tiểu luận tốt nghiệp cao đẳng công nghệ thông tin đấy. Và đoạn code đó có lẽ hơi bị nặng, dùng nhúng vào đâu đó để xài cũng hơi bị làm hệ thống thiếu hiệu quả, gặp trang có đông người truy cập là ... cũng tốn tiền thuê host lắm đó.