В лучшем случае ваша запись о выходе из системы будет разумной догадкой, даже если вы действительно заставите события сеанса работать правильно, когда пользователь покинул ваш сайт / приложение. Техника, которую вы можете использовать, заключается в том, чтобы поместить время выхода в базу данных, когда пользователь входит в систему, и просто продолжать обновлять запись в будущем, когда они будут использовать систему. Вот общая схема сеансовой таблицы, которую я недавно использовал:
[Id] [Uid] [LoginInOn] [ExpiresOn]
1 johndoe 10/14/2008 10:47 10/14/2008 11:07
В этой таблице я просто продолжаю обновлять столбец ExpiresOn, когда пользователь взаимодействует с приложением (текущее время + 20 минут). Если они попытаются взаимодействовать после ExpiresOn, то я знаю, что они простаивают в течение 20 минут и вынуждают новый логин. Для целей отчетности я знаю, что пользователь вышел из системы, если текущее время больше, чем ExpiresOn. Вы можете получить более сложный, чем это. Например, я перемещаю свои данные из таблицы сеансов, перечисленных выше, в таблицу отчетов с регулярным процессом. Это просто для того, чтобы таблица сессий была маленькой, так как с ней взаимодействует множество вещей.