Страница

Webslesson

PHP, MySql, Jquery, AngularJS, Ajax, Codeigniter, Laravel Tutorial

Wednesday, 16 August 2017

Display Online Users using PHP Mysql with Ajax Jquery




How to Show Live Online User using PHP with Ajax Jquery — 2

It is very important for any website to find out who are currently login into our syste or who are online. Because it will increase the value of website into another user who has online to system. This type of feature most we have seen in social media or forum site. So in this post we have discuss topic like display user information who are currently login into our website by using simple PHP Script Mysql database with Ajax JQuery. If you are using internet and you have already seen on many website in which we can seen the number of online users. So displaying online user details may create nice image on the new visitors of websites.

For create this type of feature there are following steps to create this type of feature.

1. Store User Login Information in table
2. Update Last Activity of Login user into his login information
3. Fetch Online User data from table

Store User Login Information in table

First when user has login into our system then we have to save his login information like his id, login time into our login details database. When login into our system by entering correct login details then after we have create one SESSION variable login id in which we have store the id of login details id based on this id we can update his last activity table column data with current time stamp.

Update Last Activity of Login user into his login information

After storing user login information in table and generate one unique login id and store into SESSION variable, so we can access this variable value into accros our system. So when user logged into system after this we will update current time stamp into his last activity table column into login details based on the unique value of login id get from SESSION variable. For update time stamp data on every three second we have use Ajax with JQuery. For update last activity data we have make one jquery function and in that function we have use Ajax request which send request to server for update login user last activity data and by using JQuery setInterval method we have called this function on every three seconds. So this way we have update login user last activity data with current time stamp data by using Ajax JQuer with PHP Sever script.

Читайте также:  Приклеенный заголовок

Fetch Online User data from table

Now We have already discuss how logged in user data insert into login details details table and how we have update that login used login details every three seconds, now we have move to master user login. This master user can view who is currently logged into our website. So for this we have make one jquery function and in this function we have use Ajax request which send request to PHP server script for fetch data from login details table and here we have condition like it fetch only that data whose last activity table column data is current time stamp data minus five second. That means it only fetch that user data whose last activity time stamp data less than of current time stamp minus five. So this query will return only that user data who currently online with our system or use our system. After fetching this data we have use setInterval() method, by using this method we have called this jquery function on every three second. So on every three second it will display live online user data on web page.

So this is simple system in which we have discuss topic like how to display online information by using PHP PDO with Ajax JQuery and Mysql.

Источник

Пользователи онлайн

На многих сайтах есть необходимость определять, какие пользователи в данный момент находятся на связи. Например, это используется в социальных сетях. Эта функция реализуется так: каждый пользователь регулярно отправляет на сервер информацию о том, что он в сети. Время этого сообщения записывается в БД. Если пользователь отправлял это сообщение совсем недавно, то считается что он в сети. Таким образом, реализация данной функции состоит из двух частей:

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

Для реализации этой функции в таблице с пользователями должно быть поле, куда записывается время обновления информации.

Обновление информации

Это действие можно выполнить двумя способами. Простой вариант заключается в том, что информация обновляется при переходе по страницам. Но этот способ имеет недостаток. Пользователь может долго находиться на одной странице и не переходить по другим страницам. Тогда информация о том, что он на связи, не обновляестя и будет указано, что он вышел с сайта. А если увеличить время, в течении которого пользователь считается онлайн, то получится противоположная ситуация. Пользователь уже вышел с сайта, но ещё долго считается, что он в сети. Оптимально подобрать время достаточно сложно.

Читайте также:  Чем отличается абстрактный класс от интерфейса python

Более сложный способ состоит в использовании AJAX. На каждой странице сайта должен быть скрипт, который регулярно обновляет информацию в БД. При этом Вы точно знаете, через какие промежутки времени происходит обновление информации. Мы рассмотрим оба способа.

В базе данных дожна быть таблица users с информацией о пользователях. Добавим в неё поле online . В него будет записываться время обновления информации. Будем записывать его в фомате Unix, то есть в секундах. Поэтому поле имеет тип INT.

Страницы сайта должны быть такие:

     

Содержимое страницы

В строке 3 создаётся переменная $user_id , в которую записано id пользователя. На практике id записывается в сессию при авторизации, а в этом скрипте он должен быть получен из сессии.

В остальном скрипт понятен. В переменную $current записывается текущее время и отправляется в БД, в поле online . Так должны выглядеть все страницы сайта. Когда пользователь переходит на любую страницу, время в поле online обновляется.

Для второго способа Вы должны зать технологию AJAX. Вместо предложенного выше кода на каждой странице сайта должет быть скрипт, регулярно отправляющий запросы на сервер. Он выглядит так:

function online () < var ntime = new Date(); var current = ntime.getTime(); var xhr = new XMLHttpRequest(); xhr.open('GET', 'infonline.php?current='+current, true); xhr.send(); >online(); setInterval(online, 40000);

Если Вы изучали AJAX, то этот код должен быть Вам понятен. К запросу добавлено текущее время. Но оно добавлено не для использования на сервере, а для предотвращения кеширования запроса. Первый вызов функции производится в строке 17. Затем, в строке 18 она запускается в функции setInterval() . Так сделано для того, чтобы первый запрос отправлялся сразу после загрузки страницы. Ведь setInterval() первый раз запускает функцию только через указанный интервал. Приведённый скрипт отправляет запросы на сервер каждые 40 секунд.

На сервере запускается скрипт infonline.php. Он точно такой же, как на странице в первом примере. Только в нём не должно быть HTML тегов.

Вывод пользователей онлайн

Данные о том, кто находится онлайн, используется по-разному. На каких-то сайтах просто выводится списох всех пользователей онлайн. На других выводится разная информация о конкретных пользователях и указывается, находятся ли они на сайте. При любом варианте используется один принцип — нужно получить текущее время и сравнить со временем в базе данных. Если разница небольшая, значит пользователь онлайн. В нашем примере данные обновляются каждые 40 секунд. Значит при разнице в 50 секунд можно считать, что пользователь вышел с сайта. Если данные обновляются без AJAX, то интервал подобрать сложнее. Вы должны сами определить, сколько времени в среднем пользователь находится на одной странице.

Коприрование материалов сайта возможно только с согласия администрации

2017 — 2023 © basecourse.ru Все права защищены

Источник

БЛОГ ПРО WEB

Рассказываю о web-разработке
и помогаю создавать сайты

Как определить, онлайн пользователь или нет? [PHP]

wps-wpimage

При создании раздела пользователей, часто требуется функция, определяющая статус пользователя.
Сегодня реализуем такую функцию с помощью Comet сервера, которая будет определять по списку, кто сейчас онлайн, а кто оффлайн, и если оффлайн, то когда последний раз пользователь был онлайн.

Читайте также:  Debian python install venv

Для начала нам необходимо авторизовавать каждого пользователя при входе в свой личный кабинет. В прошлом посте по реализации Realtime уведомлений, я описал авторизацию, повторюсь и сейчас.

Нам нужен файл comet_online.php подключения к API Comet сервера.

Почему использую Comet сервер а не обычную проверку в БД?

Есть 2 причины:

1. Не хочу использовать ресурсы своего сервера.

2. Если создается кабинет для пользователей, то там всегда требуются такой функционал, как, чат, realtime оповещения и уведомления, проверка статуса… и Все это можно организовать с помощью одного Comet сервера. Если использовать Comet, то надо использовать его по полной!

; $result = mysqli_query ( $link, $CometQuery ); if(mysqli_errno($link) != 0) < echo "Error code:".mysqli_errno($link)."  Error text:".mysqli_error($link).""; > else if(@mysqli_num_rows($result)) < $row = mysqli_fetch_assoc($result); do< $b[$row['id']] = $row['time']; >while($row = mysqli_fetch_assoc($result)); > else < echo "Empty set\n"; > mysqli_close ( $link ); return $b; > ?>

ID и КЛЮЧ разработчика Вы можете получить на самом сайте Comet сервера http://comet-server.ru/

Допустим пользователь проходит авторизацию на сайте и при этом мы авторизуем его на Comet сервере следующим фрагментом, где $Comet_uid — это id пользователя, $Comet_ulogin — это логин пользователя и $Comet_devid — это публичный ID разработчика.

include('comet_online.php'); CometOnlineQL("INSERT INTO users_auth (id, hash) VALUES (".$Comet_uid.", '".md5($Comet_ulogin)."');");

Hash — это защита, его нужно использовать для инициализации пользователя на получение уведомлений.

И мы должны соединить Comet сервер и страницы браузера кабинета пользователя, для постоянного обмена информацией.

На всех страницах кабинета, должен находиться следующий код

;   

Теперь Comet сервер может получать информацию от пользователей, и у нас есть возможность вытащить эту информацию.

Не буду использовать БД, просто для примера допустим что у нас есть массив из БД.

 '1', 'name' => 'Вася', ), array( 'id' => '2', 'name' => 'Петя', ), array( 'id' => '3', 'name' => 'Маша' ) ); ?>

Чтобы вытащить информацию о пользователях, нам нужны ID интересующих нас на данный момент пользователей.

if($mas) < foreach($mas as $item)< $on_u[] = $item['id']; >$on_users = implode(', ', $on_u); >

И получаем информацию от Comet, следующим способом

У нас «в руках» следующий формат данных

-1 — Пользователь ни когда не был авторизован
0 — Пользователь онлайн
(7+) — дата последнего входа в кабинет в UNIX-time

данные мы загнали в переменную $user_time, тем самым отобразить результат можно так $user_time[__ID_ПОЛЬЗОВАТЕЛЯ__]
а значит при выводе списка пользователей можем подставить значения (-1, 0 и (5+))

foreach($mas as $item)< echo $item['name'] . '-' . $user_time[$item['id']] . '
'; > НО, в этом случае мы отображаем не совсем понятные данные для нас, поэтому подключем маленькую функцию для расшифровки значений. function ResultTime($data) < switch($data)< case '0': $r = 'Онлайн'; // пользователь онлайн break; case '-1': $r = ''; // пользователь ни разу не авторизовывался break; default: $r = date('d.m.Y', $data); // Дата последнего входа пользователя break; >return $r; >

И сделаем вывод через неё.

Вот собственно и всё! Теперь мы знаем, какой пользователь онлайн а кто нет.

Если что не так, писать в комментарии…

Источник

Оцените статью