Trang 1 / 2 12 LastLast
Hiển thị kết quả từ 1 đến 10 / 15
  1. #1
    santasi Guest

    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 !!!!!
    Quote Quote

  2. #2
    Tham gia
    21-06-2006
    Bài viết
    114
    Like
    0
    Thanked 9 Times in 4 Posts
    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.

  3. #3
    Tham gia
    02-04-2007
    Bài viết
    72
    Like
    0
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi Lê Minh Online View Post
    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 đó

  4. #4
    Tham gia
    21-06-2006
    Bài viết
    114
    Like
    0
    Thanked 9 Times in 4 Posts

    OK! Để mình thử

    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 à?
    Được sửa bởi Lê Minh Online lúc 10:59 ngày 24-04-2007 Reason: http://igame.vn/f/showthread.php?t=413

  5. #5
    Tham gia
    15-07-2008
    Bài viết
    3
    Like
    0
    Thanked 0 Times in 0 Posts

    Thông tin

    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

  6. #6
    Tham gia
    14-12-2008
    Bài viết
    1,343
    Like
    16
    Thanked 10 Times in 10 Posts
    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 ???

  7. #7
    Tham gia
    25-03-2008
    Bài viết
    235
    Like
    0
    Thanked 2 Times in 2 Posts
    Đế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ỉ???

  8. #8
    Tham gia
    23-02-2003
    Location
    Melbourne
    Bài viết
    5,201
    Like
    0
    Thanked 24 Times in 18 Posts
    Quote Được gửi bởi ngoc_viet08 View Post
    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?

  9. #9
    Tham gia
    04-12-2004
    Location
    TP.HCM
    Bài viết
    5,242
    Like
    34
    Thanked 895 Times in 566 Posts
    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 đó.
    "bất khả tri"

  10. #10
    Tham gia
    23-02-2003
    Location
    Melbourne
    Bài viết
    5,201
    Like
    0
    Thanked 24 Times in 18 Posts
    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.

Trang 1 / 2 12 LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •