2010-08-20 16 views
13

Szukam śledzić średni czas użytkowników na stronie internetowej (w taki sam sposób, jak Google Analytics) dla wewnętrznej administracji.Jak śledzić czas użytkownika na stronie

Jaki jest najprostszy sposób to zrobić?

+2

Nie możesz użyć danych Google Analytics? – ChrisF

+2

Istnieje już kilkanaście pakietów, które to robią. Nie wymyślaj ponownie koła, jeśli nie musisz. Spójrz na webalizer, awstats, urchin, itp. Jest to w rzeczywistości niebanalny problem. Określenie "czasu na stronie" wymaga pewnych założeń, ponieważ wiadomo tylko, kiedy przeglądarka żąda treści, a nie kiedy użytkownik zamyka okno, przechodzi do zdalnego serwisu itp. –

+0

Oferujemy tablicę zadań, która umożliwia administratorom przyjście i przejąć kontrolę nad określonymi segmentami bazy użytkownika, a my chcemy zapewnić dla nich analizę administracyjną. – Walker

Odpowiedz

18

można uzyskać czas w kolejnych sposobów:

  1. Gdy użytkownik odwiedzi witrynę, zapisz aktualną godzinę na ciasteczka jako „odwiedził”, a przy następnej wizycie można go złapać, jeśli został ustawiony.
  2. I droższa metoda: kiedy ładuje się strona, uruchom js timer, a na stronie wyładuj wyślij do serwera, który użytkownik wysłał i zapisz go do db.
  3. A jeśli window.unload nie działa w Operze, możesz wysłać czas do serwera co 5 sekund i zapisać go do DB.

Jeśli potrzebujesz, mogę napisać przykładowy skrypt.

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> 

I skrypt 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); 
} 

Ale jak powiedziałem wouldn`t to działa w przeglądarce Opera

+1

to 'window.onunload' – jordanstephens

+0

tak, masz rację - popełniłem błąd, przepraszam –

+0

Niesamowite, dziękuję za pomoc - chciałbym zobaczyć scenariusz, jeśli masz czas napisać szybką? Czy mogę użyć page.unload na całej domenie? – Walker

5

głównym sposobem mogę myśleć:

Gdy użytkownik po raz pierwszy uderza w stronę logowania, na przykład, ich adres IP strona załadowany, a czas. Następnie, używając niektórych Javascript i AJAX, po opuszczeniu strony, używasz zdarzenia unload do wysyłania do obsługi AJAX, która rejestruje stronę i kiedy wychodzą.

Musisz użyć identyfikatora, oprócz sesji, aby zapisać odwiedziny strony. Załóżmy, że mam otwartych 5 wystąpień strony głównej. Każdy z nich powinien być rejestrowany indywidualnie. Tak, coś takiego:

  1. dostęp do strony, generowanie kodu (powiedzmy stronę: Kod index.php: 2345)
  2. Store to w tabeli bazy danych z ich IP i odwiedzić czas zdarzenia
  3. Unload ogień, nazywają AJAX, przechodząc na stronę kod &
  4. spojrzeć w górę w dB dla OD strony, a kod i rejestrować czas urlopu

Jeśli odwiedzają index.php ponownie wygenerujesz inny kod, powiedzmy, 36789. Użyj czegoś, co generuje losowy identyfikator GUID, najlepiej, więc możesz (zasadniczo) zignorować wszelkie możliwości kolizji na tej samej kombinacji adresu IP/strony/kodu.

+1

Co zrobisz, jeśli w przeglądarce Opera wydarzenie rozładowania nie działa? –

+1

@DimaKrasun Nie zdaję sobie sprawy, że to byłby problem. Pomyślałem, że jest obsługiwany we wszystkich przeglądarkach, ale w ogóle nie poruszyłem Opery. Naucz się czegoś nowego każdego dnia. – Tarka

2

Tam naprawdę nie jest skutecznym sposobem w PHP, ponieważ PHP jest po stronie serwera i nie ma możliwości określenia, kiedy strona została zamknięta. Aby to ustalić, musisz użyć javascript.

Co mogę zrobić, to użyć javascript, aby uruchomić timer na window.onload, a następnie zakończyć timer na window.onunload. Następnie możesz przechowywać dane i robić to, co chcesz.

0

$ (window) .unload to bardzo dobra funkcja do śledzenia użytkownika opuszczającego stronę.

ale jeden punkt jest, gdy okno zwolnić wysłać ajax czasami to działa, ajax nie jest skończony, gdy użytkownik opuszcza stronę. więc musisz dodać jeden atrybut (async: false) do ajax, kod jest cios:

$.ajax({ 
        type: 'POST', 
        async: false, 
        url: '/collect-user-time/ajax-backend.php', 
        data: {time: time} 
       }); 
Powiązane problemy