Когда я столкнулся с этой проблемой, решение пришлось искать довольно долго. В статье я постараюсь, по возможности подробно, описать, каким образом можно проверить находится ли авторизованный пользователь на сайте или нет.
Для начала, немного о проблеме. Есть сайт. На сайте есть система авторизации. Данные пользователей хранятся в таблице users (id, username, password – самый простой вариант). Когда пользователь входит на сайт, он вводит имя пользователя и пароль, программа сопоставляет введенные пользователем в форме авторизации данные с данными в таблице пользователей и открывает для пользователя возможности, доступные только зарегистрированным пользователям. Как сделать авторизацию на PHP я уже описывал, поэтому сразу перейдем к тому, как можно проверить, на сайте ли авторизованный пользователь, или уже ушел.
Для решения данной проблемы нам понадобится: немного знаний в области работы с базой данных, PHP и JQuery (для написания AJAX-запросов). Тем кто не знаком с JQuery, хочу сразу сказать – ничего страшного там нет, если вы читали статьи о том, как сделать добавление товара в корзину интернет-магазина без перезагрузки страницы, то вы уже немного познакомились с тем, как писать простые AJAX запросы.
Я буду считать, что система авторизации у вас уже налажена, поэтому подробно на ней останавливаться не буду. Далее нам понадобится еще одна таблица, назовем ее online_users. В ней создаем всего два поля user_id – идентификатор пользователя из таблицы users, и last_time – в котором будет храниться метка времени. Зачем она нужна, объясню немного позже, но уже можно догадаться. Формат поля last_time – VARCHAR(255):
Дальше нам понадобится JavaScript функция, назовем ее также user_online(), которая будет с некоторой периодичностью обращаться к PHP файлу, который и будет вызывать функцию user_online(). Для этого, нам понадобится AJAX и JQuery:
Первая строка в данной функции производит AJAX запрос к файлу online_user.php, в котором будет вызываться PHP-функция user_online(). А вот вторая строка – специальная функция setTimeout, которая, как бы правильно выразиться, производит задержку времени, то есть вызывает функцию, имя которой стоит первым аргументом, через количество миллисекунд, которые указаны во втором аргументе. Если проще, JavaScript функция user_online() вызывает сама себя через 10 секунд, и так, пока пользователь не закроет окно браузера, то есть браузер каждые 10 секунд сообщает, что пользователь все еще на сайте.
Ну и на последок, нам нужна еще одна php функция, которая будет определять на сайте пользователь, или нет, назовем ее is_online():
© 2010-2023 При использовании материалов ссылка на сайт www.webchaynik.ru обязательна