Thứ Tư, 5 tháng 11, 2014

Đếm số tổng số người truy cập và số người đang online bằng PHP&MySql

Đếm số tổng số người truy cập và số người đang online bằng PHP&MySql


---o0o---

Ý tưởng

Tạo 1 bảng tbl_analys gồm các trường: analys_id, analys_time, analys_status, analys_ip như hình dưới

analys time lưu lại thời gian cuối cùng mà người dùng tương tác với trang web.

analys_ip lưu lại ip của máy dùng để truy cập, nếu muốn bạn có thể đổi thành session hoặc cookie.

analys_status là trang thái online hay offline của người dùng.

Khi người dùng truy cập vào trang web => lấy ip của họ lưu vào bảng cùng các thông số khác. Sau 10 phút nếu anlys_time < thời gian hiện tại thì analys_status là 0 => người dùng đã offline

Có code như sau


    Lấy giá trị cho lần đầu truy cập

    <?php
    $analys_ip = $_SERVER['REMOTE_ADDR'];
    $analys_time = time();
    $analys_status = '1';
    ?>

    Thu được 1 mảng dữ liệu
    $data = array(
        'analys_ip' => $analys_ip,
        'analys_time' => $analys_time,
        'analys_status' => $analys_status
    );
    

So sánh dữ liệu trong mảng $data với dữ liệu có trong bảng theo analys_ip

Nếu chưa tồn tại ip => thêm 1 record mới

Nếu đã tồn tại ip => update record cũ

Chỉ cần count tổng record là ra được tổng số khách đã visit site

Tiếp theo ta xử lí phần đếm khách online, để làm được điều này ta cần đặt code vào footer hoặc header của trang vì đây là vị trí mà ở bất kì page nào của web đều có

Tại footer


    Show ra 2 dòng:
        Số khách đang online
        Số khách đã visit

    Tại đây ta cũng thực hiện code đếm số khách online
        + Đầu tiên, lấy ip của người dùng bằng câu lệnh
            $analys_ip = $_SERVER['REMOTE_ADDR'];
        +set 1 biến timeOut bằng thời gian hiện tại trừ đi 600, tương đương 10 phút
            $timeOut = time() - 600;
        +Lấy toàn bộ record ra và cho vào vòng foreach để thực hiện so sánh
            Nếu record có analys_ip khác analys_ip hiện tại
                thì up date lại analys_time và so sánh nó với biến $timeOut
                Nếu analys_time < $timeOut thì update status cho từng ip khác là 0 => phân tách giữa khách online và offline
            Nếu recodd có analys_ip giống thì không làm gì cả vì đã có code ở trên update lại dữ liệu của ip
    

Không có nhận xét nào:

Đăng nhận xét