Как удалить данные из базы данных, когда сессия не существует - PHP - PullRequest
2 голосов
/ 13 сентября 2010

Я разрабатываю модуль чата для своего приложения ...

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

2) Я знаю, что время сеанса по умолчанию составляет 24 минуты, поэтому после 24 минут бездействия пользователь будет выгнан с сайта и будет предложено войти в систему.еще раз.

Как удалить / очистить данные в моей базе данных, когда пользователь не имеет активности в течение 24 минут (когда пользователь вышел из сеанса из-за неактивности)

Ответы [ 4 ]

1 голос
/ 13 сентября 2010

Сохраните отметку времени каждой записи в чате в UNIX_TIMESTAMP.При поступлении новой записи в чат проверяйте отметку времени каждой записи, где отметка времени меньше, чем сейчас - 24 минуты.Кик пользователей.

1 голос
/ 13 сентября 2010

1) использовать событие unload

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

Что вы можете сделать: сохранить в базе данных, в последний раз, когда пользователь писал сообщение в чате, и каждый раз, когда вы используете вашу периодическую функцию, проверять, не написал ли пользователь ничего за последние 24 минуты 1005 *

1 голос
/ 13 сентября 2010

1) Для этого вам понадобится событие javascript onUnload.Он отправит асинхронный запрос на ваш веб-сервер, установив статус пользователя в автономном режиме.Тем не менее, вам не следует полагаться исключительно на это событие, а также установить 24-минутный таймер автоматического отключения, поскольку не гарантируется, что пользователь использует javascript.

2) Я думаю, что вашим лучшим вариантом здесь являетсяЗадание cron (каждые 30 минут или около того?), которое запрашивает вашу базу данных, идентифицирует пользователей, чье последнее действие было более 24 минут назад, а затем удаляет связанные данные.

0 голосов
/ 11 декабря 2010

Используйте функцию javascript для события
window.onbeforeunload = myLogoutFunction;

Примечание. Этот javascript не будет работать при сбое браузера.

Создайте таблицу базы данных user_log и заполните таблицудаты входа и выхода из системы.Когда есть пользователь с не обновленной датой выхода из системы, вы можете предположить, что с его соединением что-то не так.

$where = " AND `users_id`='".$response['userfound']['id']."'";
$where .= " AND `logoffdatetime`='0000-00-00 00:00:00'";

После 24-минутного php-сеанса (настройки php.ini по умолчанию).Это не будет много полезного.Но вы все равно можете сохранить в таблицу user_log.

Вам не нужна база данных сброса.Поддерживать пользователей чата в базе данных - плохая идея.Вместо этого используйте небольшой файл с отметкой времени.

Вот некоторые другие полезные советы Определите, возвращается ли пользователь без выхода из системы

$user_navigates = false;
if(isset($_SERVER['HTTP_REFERER']) && basename($_SERVER['HTTP_REFERER']) != _PAGE)
$user_navigates = true;

сохранить также обновление страницы в сеансе

if(isset($_GET['pagerefreshed']))
$_SESSION['pagerefreshed'] = $_GET['pagerefreshed'];

сохранить log_id user_id в сеансе, чтобы вы могли использовать его для восстановления.Например, нет необходимости перезагрузить страницу.

$_SESSION['loggedout']['user_id'] == $login->user_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...