Зная в режиме реального времени пользователь находится на моем сайте - PullRequest
2 голосов
/ 01 июня 2011

У меня есть веб-сайт, и я должен реализовать (с помощью PHP и / или JavaScript) предупреждающее сообщение, которое срабатывает через две минуты после того, как посетитель зашел на сайт.Я искал, но все решения, которые я нашел, для уникальной страницы.Мне нужно, чтобы таймер запускался, когда пользователь заходит на мой сайт, независимо от того, через какую страницу.И мне нужно, чтобы счетчик продолжал считать, пока пользователь перемещается по страницам моего сайта.

Одним из решений может быть использование переменных сеанса.Я могу сделать скрипт, который ищет эту переменную, если она не существует, значит, пользователь заходит на сайт.Затем я устанавливаю эту переменную с текущим временем.Скрипт находится на каждой странице, и он будет читать эту переменную через AJAX каждые x секунд, и я буду знать, когда пользователь будет на моем сайте с двух минут.

Я не знаю, правильно ли это илинет (я еще не реализовал), но я не совсем уверен, является ли сессия лучшим способом.Если пользователь покидает страницу, но другие окна навигатора открыты, сеанс не истекает, и если он снова заходит на сайт, счетчик не будет сброшен.

Итак, два вопроса:

  1. Есть ли лучший способ лучше контролировать реальный вход и выход?
  2. Если нет, верно ли мой предыдущий подход?

Спасибо.

Ответы [ 2 ]

1 голос
/ 01 июня 2011

Вам не нужен AJAX, вам просто нужно сохранить время в переменной сеанса, а затем включить немного JavaScript на каждой странице, вот пример:

<?php
session_start();

$time = microtime(true);

if (!$_SESSION['foo']) {
    $_SESSION['foo'] = (microtime(true)+120);
}
?>
<script type="text/javascript">
    var timeoutID = setTimeout(function() {
        alert('two minutes have passed');
    }, <?php echo bcsub($_SESSION['foo'], $time)*1000 ?>);
</script>

Вам понадобится дополнительная логика, чтобы она не продолжала срабатывать после истечения 120 секунд.

1 голос
/ 01 июня 2011

Как-то так должно работать.

$alert_message = false;

if(!isset($_SESSION['time_entered'])){
    $_SESSION['time_entered'] = time();
}

if($_SESSION['time_entered'] =< time() - 120){
    if(!isset($_SESSION['message_sent'])){
        $alert_message = true;
        $_SESSION['message_sent'] = true;
    }
}

А в <head>:

<?php if($alert_message):?>
<script type="text/javascript">alert("You've been here for at least two minutes.");</script>
<?php endif;?>

Также убедитесь, что у вас есть session_start() вверху каждого скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...