2010-08-20 25 views
13

Tôi đang tìm cách theo dõi thời gian trung bình của người dùng trên một trang web (giống như cách Google Analytics thực hiện) cho quản trị nội bộ.Cách theo dõi thời gian của người dùng trên trang web

Cách dễ nhất để thực hiện việc này là gì?

+2

Bạn không thể sử dụng dữ liệu Google Analytics? – ChrisF

+2

Đã có một tá gói làm điều này. Đừng sáng tạo lại bánh xe nếu bạn không cần. Nhìn vào webalizer, awstats, nhím, vv Đây thực sự là một vấn đề không tầm thường. Việc xác định "thời gian trên trang web" yêu cầu đưa ra một số giả định, vì bạn chỉ biết khi nào trình duyệt yêu cầu nội dung, không phải khi người dùng đóng cửa sổ, điều hướng đến trang web từ xa, v.v. –

+0

Chúng tôi cung cấp một bảng công việc cho phép quản trị viên đến và kiểm soát các phân đoạn cụ thể của cơ sở người dùng và chúng tôi muốn cung cấp phân tích quản trị cho họ. – Walker

Trả lời

18

Bạn có thể có được thời gian theo những cách sau:

  1. Khi người dùng truy cập vào trang của bạn, tiết kiệm thời gian hiện tại Cookie như "viếng thăm", và ở lần sau bạn có thể lấy nó, nếu nó đã được thiết lập.
  2. Và phương pháp đắt tiền hơn: khi tải trang, bắt đầu hẹn giờ js và trên trang tải xuống, hãy gửi đến thời gian máy chủ mà người dùng đã gửi và lưu vào db.
  3. Và nếu window.unload không hoạt động ở Opera, bạn có thể gửi thời gian tới máy chủ sau mỗi 5 giây và lưu trữ nó vào DB.

Nếu bạn cần, tôi có thể viết một tập lệnh mẫu.

UPDATE:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Collect time</title> 
     <script type="text/javascript" src="jquery-1.4.2.min.js"></script> 
     <script type="text/javascript"> 
     $(function() 
     { 
      var start = null; 
      $(window).load(function(event) { 
       start = event.timeStamp; 
      }); 
      $(window).unload(function(event) { 
       var time = event.timeStamp - start; 
       $.post('/collect-user-time/ajax-backend.php', {time: time}); 
      }) 
     }); 
     </script> 
    </head> 
    <body> 

    </body> 
</html> 

Và kịch bản backend:

<?php 
$time = intval($_POST['time']); 
if (!file_exists('data.txt')) { 
    file_put_contents('data.txt', $time . "\n"); 
} else { 
    file_put_contents('data.txt', $time . "\n", FILE_APPEND); 
} 

Nhưng như tôi đã nói nó wouldn`t làm việc tại trình duyệt Opera

+1

đó là 'window.onunload' – jordanstephens

+0

yes you're right - tôi đã phạm sai lầm, xin lỗi –

+0

Tuyệt vời, cảm ơn sự giúp đỡ - Tôi rất muốn xem một kịch bản nếu bạn có thời gian để viết nhanh? Tôi có thể sử dụng page.unload trên toàn bộ miền không? – Walker

5

cách chính tôi có thể nghĩ:

Khi người dùng đầu tiên truy cập một trang, bạn đăng nhập, ví dụ, địa chỉ IP của họ, các trang được nạp, và thời điểm đó. Sau đó, bằng cách sử dụng một số Javascript và AJAX, khi họ rời khỏi trang, bạn sử dụng sự kiện unload để gửi đến trình xử lý AJAX ghi lại trang và khi họ rời khỏi.

Bạn cần sử dụng một số loại ID, ngoài phiên, để lưu trữ lượt truy cập trang. Giả sử tôi có 5 lần mở trang chủ, bạn muốn đăng nhập từng trang riêng lẻ. Vì vậy, một cái gì đó như thế này:

  1. truy cập trang, tạo ra một mã số (giả sử trang: index.php mã: 2345)
  2. cửa hàng này trong một bảng cơ sở dữ liệu với IP của họ, và ghé thăm thời gian sự kiện
  3. Unload hỏa hoạn, hãy gọi AJAX, đi qua trang & đang
  4. Tra cứu trong DB cho IP, trang, và mã, và đăng nhập lần nghỉ

Nếu họ truy cập index.php một lần nữa, bạn sẽ tạo ra một mã khác, giả sử, 36789. Sử dụng cái gì đó tạo ra một GUID ngẫu nhiên là tốt nhất, vì vậy bạn có thể (về cơ bản) bỏ qua bất kỳ khả năng va chạm nào trên cùng một kết hợp IP/trang/mã.

+1

Và bạn sẽ làm gì, nếu tại sự kiện tải xuống trình duyệt Opera không hoạt động? –

+1

@DimaKrasun Tôi không nhận ra đó sẽ là một vấn đề. Nghĩ rằng nó đã được hỗ trợ trong tất cả các trình duyệt, nhưng tôi đã không đụng đến Opera nhiều. Học điều mới mỗi ngày. – Tarka

2

Có thực sự không phải là một cách hiệu quả để làm điều này với PHP, vì PHP là phía máy chủ và không cung cấp cách nào để xác định thời điểm trang bị đóng. Bạn cần sử dụng javascript để xác định điều này.

Điều tôi sẽ làm là sử dụng javascript để bắt đầu hẹn giờ trên window.onload và sau đó kết thúc bộ hẹn giờ trên window.onunload. Sau đó, bạn có thể lưu trữ dữ liệu và làm những gì bạn muốn với nó.

0

$ (cửa sổ) .unload là một chức năng rất tốt để theo dõi trang người dùng rời khỏi trang.

nhưng một điểm là khi cửa sổ tải xuống để gửi ajax đôi khi nó hoạt động, ajax chưa kết thúc khi người dùng rời khỏi trang. do đó, bạn cần thêm một thuộc tính (async: false) vào ajax, mã sẽ bị thổi:

$.ajax({ 
        type: 'POST', 
        async: false, 
        url: '/collect-user-time/ajax-backend.php', 
        data: {time: time} 
       }); 
Các vấn đề liên quan