Как правильно посчитать время пользователя online?

Подскажите как на Ваш взгляд правильно подсчитать общее время которое пользователь находился онлайн?
За онлайн можно взять некое действие которое пользователь совершает каждые 30 секунд.

Не важно на каком языке программирования - интересна логика.
  • Вопрос задан
  • 3268 просмотров
Решения вопроса 1
WooDFox
@WooDFox
Думаю, правильнее будет на стороне сервера хранить начало авторизации и при каждом действии пользователя фиксировать "конец". При выходе считать сессию завершенной. При отсутствии действий свыше n секунд - считать "концом" последнюю активность.
Считать любые автоматические запросы активностью пользователя ИМХО неправильно.

Однако, все очень зависит от конкретного случая - и таймауты и способ хранения (таки, текущий онлайн и/или общий). И даже учет автоматических запросов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ximik777
@ximik777 Автор вопроса
На ум приходит что то типа такого решения.
$mc = new Memcache;
    $mc->connect('127.0.0.1', 11211);

    $period = 30;   // longpoll reconnect
    $delay = 1;     // reconnect delay
    $uid = 1;

    if(!$last_active = $mc->get("last_active_{$uid}")){
        $mc->set("last_active_{$uid}", time());
        die();
    }

    $now = time();
    $online_time = $now - $last_active;
    $counter = $mc->get("online_counter_{$uid}") ?: 0;

    if($online_time < $period+$delay){
        $counter += $online_time;
    } else {
        $counter += $period;
    }
    $mc->set("online_counter_{$uid}", $counter);
    $mc->set("last_active_{$uid}", time());

    echo "User ({$uid}) online time: {$counter}";
Ответ написан
@Snuff
Каждую минуту с клиента шлешь через AJAX/websockets запрос на сервер, так и отслеживаешь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы