Как отслеживать использование пользователей на сайте? - PullRequest
3 голосов
/ 26 января 2012

Я использую PHP / MYSQL.Каждый раз, когда пользователь входит в систему, мы вводим время, когда он вошел в систему, и дату, когда он вошел в систему. Хотя нам легко сказать, сколько пользователей вошли в конкретный день, я не уверен, как рассчитать, сколько времени они провели на сайте.,

Например, точно так же, как пользователь входит в систему, и мы вставляем запись в таблицу login_tracking, мы также обновляем эту запись, когда пользователь нажимает кнопку «Выйти» со временем, когда он вышел из системы.Таким образом мы вычитаем время входа в систему и выхода из системы и получаем время каждого пользователя, но что происходит, если большинство людей не нажимают кнопку «Выход из системы» и вместо этого очищают файлы cookie / кэш или просто закрывают окно / вкладку, на которой был открыт сайтв?

Есть ли лучший способ сделать это?Я использую Google Analytics, которая дает мне пользователей и посещения, которые появляются каждый день, но я хочу, чтобы что-то частное отслеживало использование?

Есть идеи, что я могу сделать?

Обновление: @Paul спросил,Я использовал сеансы.Я и вот как я его использую:

$ username = $ _SESSION ["username"];

Ответы [ 4 ]

2 голосов
/ 26 января 2012

Вы можете сделать это, установив дату и время входа в систему.

Поэтому, когда пользователь входит в систему, вы обновляете поле mysql, равное DATETIME, что-то вроде ...

 $q = $dbc -> prepare("UPDATE accounts SET loggedOn = NOW() WHERE username = ?");
 $q -> execute(array($_SESSION['username']));

Теперь все, что вам нужно сделать, это создать еще несколько столбцов в таблице базы данных, один из которых называется totalTime, а другой - active или что вам больше нравится.

На каждой странице загружайте обновление active, которое является столбцом DATETIME, также с NOW(),

 $q = $dbc -> prepare("UPDATE accounts SET active = NOW() WHERE username = ?");
 $q -> execute(array($_SESSION['username']));

Это гарантирует, что вы знаете, если пользователь все еще в сети или нет, вы можете проверить, когдаони были последними активными.Теперь скажите, если после 5 минут бездействия вы хотите узнать общее время, которое вы просто делаете,

 $q = $dbc -> prepare("UPDATE accounts SET totalTime = ADDDATE(totalTime, DATEDIFF(NOW(), loggedOn)) WHERE active < DATE_SUB(NOW(), INTERVAL 5 MINUTE)");
 $q -> execute();

То, что сделано выше, это если пользователи неактивны в течение 5 минут, это займет время loggedOn минус этос текущего времени, оставив вам общее время на сайте и добавьте его в столбец DATETIME totalTime.

Просто поместите последний запрос как набор cron также каждые 5 минут, и у вас естьдовольно точная мера времени людей на вашем сайте.

1 голос
/ 26 января 2012

Настройте вашу таблицу login_tracking, чтобы она включала:

  • session_id (varchar 100)
  • user_id
  • время (обновляется каждые 10 минут, пока есть активность)
  • start (дата / время, когда они впервые входят в систему)
  • end (datetime, когда сессия закрывается либо закрытым браузером, либо выход из системы)

Код:

$date = date('Y-m-d H:i:s');
$time=time();
$time_check=$time-600; // user will be marked online if they have any activity for 10 minutes
$session=session_id();

// check if the user is currently listed as online in the database
$getactiveession = mysql_query("SELECT * FROM login_tracking WHERE session = '$session' AND end IS NULL");
$active_session = mysql_num_rows($getactivesession);

// if they are not listed as online, insert a row for them
if($active_session == "0"){
$make_active = mysql_query("INSERT INTO login_tracking (session, user_id, time, start) VALUES('$session', '$user', '$time', '$date')");
}
else {
// UPDATE user's current time if they are already currently logged in
$update_session = mysql_query("UPDATE login_tracking SET time = '$time', user_id = '$user' WHERE session = '$session'");
}

// get total users online
$gettotalonline = mysql_query("SELECT * FROM login_tracking");
$total_online = mysql_num_rows($gettotalonline);


// if over 10 minutes and no new activity (time column has not been updated), update end session time
$end_session_time = mysql_query("UPDATE login_tracking SET end = '$date' WHERE time<$time_check");

При этом вы можете отобразить список всех онлайн-пользователей, а также ссылки на их профили, аватары и т. Д.

Единственное, о чем я могу подумать, это при вставке новой строки для нового вошедшего в систему пользователя, вам может потребоваться выполнить команду "WHERE end = '0000-00-00 00:00:00" вместо "WHERE end IS NULL" ", не уверен, что вы можете сделать IS NULL в указанное время.

Ответ на ваш комментарий # 1

У меня есть ПОХОЖАЯ функция, как функция на моем сайте, которая находится на каждой странице, поэтому независимо от того, на какой странице просматривает мой пользователь, они будут считаться зарегистрированными. Поэтому ее легко внедрить везде.

Тем не менее, вам, вероятно, понадобится настроить его как cronjob, чтобы запускать каждую минуту или 10 минут, чтобы проверять записи в течение 10 минут. Я говорю это потому, что ... если пользователь закрывает свой браузер, но не выходит из системы, он не будет обновлять свою запись в базе данных, пока другой человек (вошедший в систему или гость) не получит доступ к странице, на которой выполняется вышеуказанный код. Если у вас работает cronjob, то проблем не будет. (это также касается вашего комментария о том, что время окончания сеанса будет выполнено, мой сайт не требует, чтобы вы были так довольны, что вы подняли вопрос, поэтому я считаю, что для вас это должен быть кроной). Что касается перенаправления их на страницу выхода из системы, я не уверен, как это будет работать в этом случае, поскольку их страница не обновляется. Вероятно, это должен быть Ajax или что-то в этом роде.

1 голос
/ 26 января 2012

Я предлагаю вам использовать поле «последний использованный» вместо поля, которое содержит дату / время выхода из системы, и поле «первый использованный» вместо поля, которое содержит дату / время входа в систему.

Всякий раз, когдапользователь запрашивает страницу, вы проверите значение «последний использованный», если оно было не так давно (например, менее 15 минут), вы обновите его до текущей даты / времени, иначе вам придетсясоздайте новую запись в базе данных (предположим, что пользователь сейчас находится в новой «сессии», но не нужно создавать новую).И, конечно же, свяжите сеанс с только что созданной записью.

Это псевдокод:

Page Requested
if new session
    create session 
    create database record (first used=now, last used = now)
    associate the session with the record
else
    query the record associated with the current session
    if long ago
        create a new record (first used=now, last used = now)
        associate the new record with the current session
    else
        update the existing record (last used = now)

Это выглядит просто, хотя я и не пытался его реализовать.

1 голос
/ 26 января 2012

Я сделал простой скрипт чата на веб-сайте, выполняющий что-то вроде этого.

Что я сделал, так это сохранил их идентификатор сессии и метку времени в таблице. На каждой странице, которую они посещают, я буду обновлять отметку времени. Когда они выходят из системы, я уничтожаю их журнал. У меня также была проверка скрипта обновления для других пользователей, которые были «неактивны» в течение 5 минут и удалили их. Вы можете выполнить то же самое, настроив запуск задания cron каждые 5 или 10 минут и отметив те отметки времени, которые старше 5-10 минут, пометив этих пользователей как неактивных, а затем рассчитав общее время, проведенное на сайте.

Если вы просто хотите, чтобы количество пользователей было активным в определенное время, я бы посмотрел на http://whos.amung.us/. Это простой плагин, который подсчитывает количество людей в сети в любой момент времени и откуда они приходят.

...