mysql — определяет, вошел ли пользователь в приложение php chat

Итак, вот что я сделал:

Я добавил колонку к своему users таблица в моей БД, столбец называется logged_in, я устанавливаю его в 1, когда пользователь входит в систему, и я устанавливаю его в 0, когда пользователь выходит из системы (и затем я использую это, чтобы показать пользователю, если его друзья в сети или нет, проверив этот столбец для каждого из его / ее друзей ).

Я также должен держать пользователя вошедшим в систему каждый раз, когда он входит в систему, пока он не выйдет вручную, нажав кнопку выхода из системы, поэтому я использую файлы cookie.

Все это будет прекрасно работать, если пользователь всегда выходит из системы, нажимая кнопку выхода на моем веб-сайте (или если мне каким-то образом разрешают обновлять столбец «logged_in» в моей базе данных всякий раз, когда пользователь удаляет свои куки (невозможно)).

Итак, вот что приводит к моей проблеме:

Всякий раз, когда пользователь удаляет свои куки, мой код неправильно читает их logged_in столбец в моей БД, как 1хотя пользователь теперь будет выходить из системы (что приводит к тому, что его друзья видят его «онлайн», а не «оффлайн»), эта ошибка сохраняется до тех пор, пока пользователь не войдет в систему, а затем снова не выйдет вручную (нажатием кнопки выхода), но это будет происходить каждый раз, когда пользователь очищает свои куки.

Причина, по которой я не использую ничего, связанное со временем (проверяйте активность пользователя каждый раз x секунд) для автоматического входа-выхода пользователей, потому что я должен держать пользователя вошедшим в систему.

Итак, моя проблема, наконец:

Пользователи должны быть в состоянии выйти из системы только вручную, нажав кнопку «Выйти» на моем веб-сайте. В настоящее время я достигаю этого, сохраняя их в системе с помощью файлов cookie (чтобы они не могли выйти из системы, закрывая мой веб-сайт или закрывая браузер), но когда они удаляют свои файлы cookie, этот пользователь превзошел мой первый закон, а теперь и мою базу данных. Ошибочно полагает, что пользователь все еще вошел в систему.

2

Решение

Вы используете функцию ajax для проверки связи с кодом пользователя. Затем вы можете поставить отметку времени и записать запрос. Чтобы проверить, что пользователь онлайн, проверьте, что последний пинг был в течение x времени от настоящего момента.

Это также позволит вам профилировать другую полезную информацию о ваших активных пользователях / пользователях с вкладками

0

Другие решения

Я бы рекомендовал добавить новую таблицу сессий с двумя столбцами; один для идентификатора пользователя и другой для «последнего активного» столбца метки времени.

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

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

И когда пользователь выходит из системы, удалите строку для пользователя.

0

В качестве альтернативы моему другому ответу (поскольку я читаю, что вы не можете полагаться на время); Предполагая, что вы в настоящее время используете AJAX, вы можете переключиться на использование Websockets; что позволит вам увидеть, когда соединение закрывается.

Я, вероятно, рекомендую использовать трещотка, для PHP Websockets.

0
По вопросам рекламы [email protected]