С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 135

Как удалять неактивных в течении 20 минут пользователей на сайте? (статистика сайта)

23.06.2015, 22:30. Показов 1995. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток всем кто читает эту тему!

Я написал скрипт отображения пользователей онлайн на сайте.
При входе пользователь записывается в БД в таблицу `session` и я получаю информацию, что он онлайн.
Также для гостей, с выводом их ip в БД.
Но теперь назрел вопрос, ведь в БД мы записываем, если пользователь закрывает сайт и не выходит с него нам нужно удалять его из БД.

Я хочу сделать, чтобы, если пользователь(гость) не активен на сайте в течении 20 минут, то нужно удалять запись из БД о нем. Как я могу это сделать? В БД есть время входа. и оно обновляется при переходе на каждую страничку.

MySQL
1
$Row = mysqli_query($CONNECT,"UPDATE `session` SET `putdate` = NOW(), `user` = '$_SESSION[USER_LOGIN]', '$ip' WHERE `id_session` = '$id_session'");
/*Обновляем время, имя,(вдруг пользователь зашел, чтобы отображался его логин, а не 'Гость' как сначала, если не авторезирован), ip*/

Добавлено через 3 часа 2 минуты
Неужели никто не знает?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.06.2015, 22:30
Ответы с готовыми решениями:

Индексация страницы сайта в течении нескольких минут!!!!!
Как быстро показать свою страницу поисковикам,чтоб они ее схавали (особенно Яндексу)?-Легко! Достаточно иметь раскрученный твиттер аккаунт!...

Статистика пользователей - как идентифицировать пользователей с одинаковыми именами
есть 2 таблицы users, и item, в таблице item есть поле username, задача такова что бы вывести информацию о том сколько записей сделал user...

Как узнать ID в контакте. (за ответ в течении 30 минут дам 2 плюсика)
Как узнать ID пользователя в ВК, который играет в мою игру?????

19
 Аватар для Давран
203 / 152 / 44
Регистрация: 24.11.2013
Сообщений: 1,106
23.06.2015, 22:35
Admiral2014, так вопрос в чем?

Добавлено через 57 секунд
как вариант каждую 5 минут запрашиваем время последней активности и сверяем с нынешним временем. Если больше или равно 20 то удаляем его
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 135
23.06.2015, 22:42  [ТС]
"DELETE FROM `session` WHERE `putdate`(таблица в которую записывается время активности) < NOW() - INTERVAL '1' MINUTE"

Такой запрос?
0
 Аватар для Давран
203 / 152 / 44
Регистрация: 24.11.2013
Сообщений: 1,106
23.06.2015, 22:43
Admiral2014, а нельзя сперва брать значения из бд, через php его проверять, а потом по необходимости удалять?
0
8 / 8 / 5
Регистрация: 28.03.2014
Сообщений: 137
23.06.2015, 23:15
http://myrusakov.ru/
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 135
24.06.2015, 16:44  [ТС]
Не понимаю как проверить время в putdate с тем, что сейчас.
Нужно чтобы каждую минуту на сервер приходил запрос, если пользователь ничего не делает на сайте, то удалять записьи из базы и также выходить из профиля.

Добавлено через 2 часа 34 минуты
Задача состоит в следующем:

Проверять каждую минуту(или каждые 5 минут) активность пользователей.

Сейчас при переходе по сайту идет следующее:
1) Если нет записи в таблицы(пользователь первый раз зашел) мы добавляем запись в нужной форме.
После перехода по любым страницам мы обновляем запись в базе следующим образом:
MySQL
1
$Row = mysqli_query($CONNECT, "UPDATE `session` SET `putdate` = NOW(), `user` = '$_SESSION[USER_LOGIN]', `ip` = '$ip' WHERE `id_session` = '$id_session'");
Тем самым обновляя время.
2) Если пользователь вошел на сайт(авторизировался) мы обновляем его ник и все параметры тем же образом.

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

Просьба подсказать, какими проверками этого можно добиться.
________________________________________ _______________________

Также мне нужно, чтобы, если пользователь авторизирован и не активен на сайте в течении 20 минут он автоматически покидал сайт(срабатывал выход).
0
 Аватар для Давран
203 / 152 / 44
Регистрация: 24.11.2013
Сообщений: 1,106
24.06.2015, 17:16
Цитата Сообщение от Admiral2014 Посмотреть сообщение
Просьба подсказать, какими проверками этого можно добиться.
Проверять время последней активности с текущем временем
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 135
24.06.2015, 19:51  [ТС]
Цитата Сообщение от Давран Посмотреть сообщение
Проверять время последней активности с текущем временем
Это мне ни о чем не говорит.

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

Добавлено через 2 часа 25 минут
ап.. неужели нет знающих людей? просто нужен правильный метод, который применяют на нормальных сайтах. Например PayPal вообще как-то подгружает страничку и спрашивает "Вы все еще используете сайт?" и предлагает остаться.. Мне хотя бы чтобы просто выходил из профиля на страницу входа.
0
 Аватар для At0m1c
48 / 43 / 6
Регистрация: 09.06.2012
Сообщений: 152
24.06.2015, 20:08
А на крон есть возможность повесить?
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 135
24.06.2015, 20:10  [ТС]
вопрос что такое крон)?
0
 Аватар для At0m1c
48 / 43 / 6
Регистрация: 09.06.2012
Сообщений: 152
24.06.2015, 20:17
http://mblogm.ru/blog/cron-for-php-scripts/
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 135
24.06.2015, 20:59  [ТС]
Думаю это не лучшее решение. Жду других правильных решений этой задачи.
0
 Аватар для At0m1c
48 / 43 / 6
Регистрация: 09.06.2012
Сообщений: 152
24.06.2015, 21:17
Мне хотя бы чтобы просто выходил из профиля на страницу входа.
Т.е. нужен message какой-нибудь? Отправляйте ajax запрос каждые 5 минут.
1
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 135
25.06.2015, 10:50  [ТС]
с ajax не знаком, поэтому на крайний случай, не обязательно message. Это как пример привел. Просто нужно чтобы выходило из профиля. Использовалась ф-ция logout

Добавлено через 13 часов 31 минуту
ап.. форумчане помогайте)
0
 Аватар для At0m1c
48 / 43 / 6
Регистрация: 09.06.2012
Сообщений: 152
25.06.2015, 13:22
Примерно так можно реализовать. Подключать скрипт в условии если пользователь авторизован.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function resetAuth() {
    $.ajax({
        url: "handler.php", // В файле запрос к бд
        type: "POST",
        data: {login: "USER_LOGIN", ip: "USER_IP"}, // Параметры
        success: function(data) {
                    // Тут вывод какого-то сообщения или обновление страницы с logout
        
    });
};
setTimeout(resetAuth, 300000);
1
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 135
25.06.2015, 21:07  [ТС]
Спасибо, я понял вашу идею, где бы я мог ознакомится с ф-циями ajax?

Пишу код через brackets, и например откуда мне знать, что у ajax есть функция с именем setTimeout, а не setTimeoutdweefod. Может есть какие-то расширения, чтобы при написании кода появлялось помощь(список ф-ций) как в c++ когда писал помню там список и можно было пролистать и посмотреть все значения ф-ции, что она делает, аргументы. Тут же такого не вижу поэтому даже не могу представить как писать .

Добавлено через 2 часа 27 минут
Для того, чтобы научится азам ajax начал смотреть видео уроки..

сделал все как там и получил 0 результата.

Вот код:pastebin

В чем проблема? почему он не работает? Что я не сделал.

Библиотеку подключил.
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
25.06.2015, 23:11
Цитата Сообщение от At0m1c Посмотреть сообщение
data: {login: "USER_LOGIN", ip: "USER_IP"}, // Параметры
вот это только не надо -- логин определяется из сессии, ip сам по себе передается (ip протокол без передачи ip -- это нонсенс), и считать его можно обычно из переменной $_SERVER['REMOTE_ADDR']

Не по теме:

также, когда-то была (или все еще?) распространена конфигурация nginx proxy+apache backend, часто на бекенд реальный ип поступает в заголовке X-Forwarded-For, т.е. переменная $_SERVER['HTTP_X_FORWARDED_FOR'], либо X-Real-IP, либо что-то в этом духе. Зависит от настроек сервера


и дело не столько в том, что эти данные просто представляют мусорный трафик: они представляют собой вредный трафик, если сервер на них полагается. Любой клиент сможет сказать, что у него другой ip, и пользователя другого подставить, в итоге, сделать такую штуку, что как будто бы на сайте в любой момент находится огромное количество пользователей, что, потенциально, может привести к DoS-у.
Цитата Сообщение от Admiral2014 Посмотреть сообщение
откуда мне знать, что у ajax есть функция
у ajax всего пара функций, вернее, один объект с несколькими методами. Вам стоит почитать что-то про язык javascript в целом, в первую очередь. А ajax, упрощенно говоря, просто библиотека (как, например, в с++ есть libuv, для работы с сетью, или libcurl).
Цитата Сообщение от Admiral2014 Посмотреть сообщение
В чем проблема? почему он не работает?
вы отправляете запрос при нажатии на кнопку с id=load. Если вам нужно отправлять запрос время от времени, то пользуйтесь функциями setTimeout или setInterval. Только не так, как советует At0m1c (у него эта функция запустится только один раз), а, например, так:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function resetAuth() {
    $.ajax({
        url: "handler.php",
        type: "POST",
        data: {action: 'update_online', csrf_token: "token"},
        success: function(data) {
                    // бла-бла-бла
        });
    setTimeout(function(){ resetAuth(); }, 30000);
};
$(function(){ resetAuth(); });
если же проблема в том, что не работает и при нажатии на кнопку, то посмотрите в сообщения консоли (инструменты разработчика, в любом браузере, -> консоль). Возможно, вы неправильно подключили библиотеку, либо у вас присутствует ошибка в серверном скрипте (тем более, что событие onerror не обрабатывается), или вы допустили какие-то ошибки в синтаксисе

Не по теме:

на вскидку, конкретно в этом участке кода я их не заметил, однако интерпретатор распознает такие ошибки гораздо лучше меня


Цитата Сообщение от Admiral2014 Посмотреть сообщение
Пишу код через brackets, и например откуда мне знать, что у ajax есть функция с именем setTimeout, а не setTimeoutdweefod. Может есть какие-то расширения, чтобы при написании кода появлялось помощь(список ф-ций)
такая штука называется code completion, или intellisense (это типа "продвинутая" версия code completion). В brackets ни разу ничего не писал, но поскольку это редактор для веба, то подозреваю, что там должна быть такая возможность (первые три ссылки из гугля по запросу "brackets javascript code completion").
Впрочем, разумеется, эта возможность вам никак не поможет, если вы не знаете самого языка. Это аналогично c++ -- никакой редактор и/или ide за вас программу не напишет

По поводу же первоначально поставленного запроса: это обычная задача сборки мусора. в пхп, как в stateless-инфраструктуре нельзя эту задачу решить эффективно. Действительно, как вам посоветовал At0m1c, проще и дешевле всего повесить эту задачу на крон или на какую-нибудь мини-программу, например на том же c++, который время от времени будет запускать некий скрипт (этот скрипт может быть написан и на php, в том числе), если, конечно, сервер предоставляет такую возможность. В противном случае вам придется выполнять этот код по удалению давно не заходивших пользователей при каждом запросе, либо добавлять состояние (например, время или количество запросов), которое будет проверяться относительно быстро, и если это состояние удовлетворяет неким условиям (с момента предыдущего запуска сего удалятора прошло более 200 запросов, или больше 20ти минут, например), тогда запускать ваш относительно тяжелый запрос в базу. Ну, соответственно, если не удовлетворяет -- то оставить все как есть.

Цитата Сообщение от Admiral2014 Посмотреть сообщение
где бы я мог ознакомится с ф-циями ajax?
в гугле, например. поверьте, вы далеко не первый (технологии уже десяток лет), кто с ней сталкивается.
А вообще, по джаваскрипту есть довольно неплохой справочник, как ни странно, называется http://javascript.ru/ Раздел по ajax-у там тоже есть: http://javascript.ru/ajax . Алсо, библиотека, которую вы использовали (тот самый значок $ и его методы ajax, bind, и прочее) называется jquery. По ней тоже можете почитать что-то, если собираетесь использовать ее в дальнейшем. Например, http://anton.shevchuk.name/jquery/
0
 Аватар для At0m1c
48 / 43 / 6
Регистрация: 09.06.2012
Сообщений: 152
26.06.2015, 00:40
Да, поторопился и допустил грубую ошибку передавая данные пользователя открыто. Их определить можно в handler.php
Если вам нужно отправлять запрос время от времени, то пользуйтесь функциями setTimeout или setInterval. Только не так, как советует At0m1c (у него эта функция запустится только один раз),
Я тоже про это подумал, но предположил если сработает один раз logout и пользователь вылетит из авторизации, то ф-ция второй раз будет не нужна.
0
0 / 0 / 0
Регистрация: 03.06.2015
Сообщений: 135
26.06.2015, 15:42  [ТС]
Вот что выводит в консоль: XHR finished loading: POST "http://unlock.webit-expert.com/handlers.php".

Добавлено через 2 часа 56 минут
Код поправил, теперь работает, но по прежнему в консоли: XHR finished loading: POST "http://unlock.webit-expert.com/handlers.php".

и именно когда файл загружается
0
 Аватар для At0m1c
48 / 43 / 6
Регистрация: 09.06.2012
Сообщений: 152
26.06.2015, 16:12
http://javascript.ru/forum/jqu... ading.html
http://stackoverflow.com/quest... og-message
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.06.2015, 16:12
Помогаю со студенческими работами здесь

Статистика пользователей: показывать, сколько пользователей работают сейчас в программе
доброго времени суток! как сделать статистику пользователей для своей программы как в скайпе? заходит пользователей то +1 к этому...

Как безопасно удалять БД и пользователей при клике на ссылку?
Здравствуйте! Как присвоить значение переменной, в зависимости от того, какая ссылка нажата? Ссылки формируются из БД. Суть: скрипт...

ProgressBar - заполнение в течении 30 минут
Доброго времени суток, помоги пожалуйста, у меня на форме есть ТАймер и прогресс бар, как сделать что б прогрес бар заполнялся в течении 30...

Есть допустить писать тегами для пользователей (как виз.редактор), что нужно удалять и как?
Есть разрешить html-теги для пользователей, что нужно удалять и как? Знаю, что script и iframe, но как удалять правильно? (т.к. теги...

Windows 8.1, загрузка ссд на 100% в течении нескольких минут
Доброго времени суток, Имеется ссдшник INTEL SSDSC2BW240A4, ведет себя крайне непонятно. К примеру при запуске 3dsmax 2012 он начинает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru