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 !!!!!
Lê Minh Online viết 13:08 ngày 10/10/2018
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 !!!!!
Với PHP mình dùng session: mỗi user visit delete 1 row đồng thời insert 1 session id vào table đó, công việc còn lại chỉ là đếm số session id trong table. Cách này ăn đứt cách dùng theo ip và time để đếm lượng truy cập. Còn không biết yêu cầu của bạn ra sao, nếu mới làm web thì kiếm cái free counter nào đó bỏ vào cho nhanh thấy.
concocnho viết 13:15 ngày 10/10/2018
Được gửi bởi Lê Minh Online
Với PHP mình dùng session: mỗi user visit delete 1 row đồng thời insert 1 session id vào table đó, công việc còn lại chỉ là đếm số session id trong table. Cách này ăn đứt cách dùng theo ip và time để đếm lượng truy cập. Còn không biết yêu cầu của bạn ra sao, nếu mới làm web thì kiếm cái free counter nào đó bỏ vào cho nhanh thấy.
nếu được bạn post code của mình lên cho mọi người tham khảo thì quá tuyệt luôn đó
Lê Minh Online viết 13:14 ngày 10/10/2018
Xem nào đầu tiên tạo cái table stats với:

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:
PHP Code:
CREATE TABLE `stats
    (
      `
idint(11unsigned NOT NULL auto_increment,
      `
s_timeint(10NOT NULL,
      `
s_idvarchar(40NOT NULL,
      
PRIMARY KEY  (`id`)
    ) 
ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=129 
Còn dưới đây là file online.php, giải thích trong code cho tiện
PHP Code:
<?
// 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";
?>
Mình vừa viết nó, test trên localhost với IE, FF & Opera thấy số online là 3 chắc OK!

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 à?
kianh viết 13:08 ngày 10/10/2018
Trong trường hợp 1 người, trên 1 máy,chạy trên cùng 1 browser và mở 2 tab lên để chạy online.php thì báo số người đang online là 2
ngoc_viet08 viết 13:20 ngày 10/10/2018
thanks bác lê minh online . mình cũng đang mún tìm hiểu cái này .
Trong trường hợp 1 người, trên 1 máy,chạy trên cùng 1 browser và mở 2 tab lên để chạy online.php thì báo số người đang online là 2
có lẽ chúng ta ko cần quan tâm để xử lý những trường hợp client dở hơi như thế này .
có khi nào bạn vào 1 site 2 tab cùng 1 brower ???
fotech_nd viết 13:05 ngày 10/10/2018
Đếm số người đang online - theo em được biết thì PHP làm khá phức tạp (hình như là phức tạp chung đối với các Scripting language thì phải).

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ỉ???
jiSh@n viết 13:05 ngày 10/10/2018
Được gửi bởi ngoc_viet08
có khi nào bạn vào 1 site 2 tab cùng 1 brower ???
Chuyện này rất bình thường. Bạn đọc news thì bạn mở một lần nhiều tab hay cứ mở mỗi 1 tab. Vào các forum cũng thế, mở nhiều tab hay mở mỗi 1?
Vô Thin viết 13:11 ngày 10/10/2018
Vấn đề đau đầu là dùng script PHP để tính số người đang Online (thực sự là vừa mới Online gần đó thì đúng hơn - họ đóng trình duyệt lại chưa hẳn nó đã báo họ ra đi ngay mà phải đợi một số thời gian nào đó - nghĩa là chậm hơn ở các hệ thống server CHAT), có hai tình huống xảy ra:

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 đó.
jiSh@n viết 13:20 ngày 10/10/2018
Hiện giờ chả có giải pháp đếm số lượng unique visitor nào hoàn toàn chính xác, kể cả việc phân tích log của webserver (như Awstat) vẫn ko chính xác 100% bởi vì lý do nằm từ client chứ ko phải server.
Bài liên quan
0