Управление активными сессиями на нескольких устройствах

Как работает управление активными сессиями на нескольких устройствах Отметим: когда пользователь входит в мобильное приложение на новом устройстве, сервер создаёт сессию: генерирует уникальный идентификатор, сохраняет название устройства, операционную систему, IP-адрес и момент входа. Все сессии

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Управление активными сессиями на нескольких устройствах
Средний
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    896
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1003
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

Как работает управление активными сессиями на нескольких устройствах

Отметим: когда пользователь входит в мобильное приложение на новом устройстве, сервер создаёт сессию: генерирует уникальный идентификатор, сохраняет название устройства, операционную систему, IP-адрес и момент входа. Все сессии привязываются к одному аккаунту и хранятся в базе данных с меткой времени последней активности. Для каждого устройства выдаётся JWT-токен, в который зашит device_id — это позволяет серверу определять текущее устройство. Экран управления активными сессиями даёт пользователю полный контроль: он видит все устройства, где выполнен вход, и может завершить подозрительные сессии одним нажатием. По нашим данным, такое решение снижает частоту взломов аккаунтов на 40% — это результат аудита безопасности у клиентов из финтех-сектора. Если не внедрить управление сессиями, пользователь остаётся слепым к несанкционированному доступу.

Что показывать пользователю

Для каждой активной сессии нужен минимальный контекст для идентификации устройства:

  • Название устройства и платформа (например, "iPhone 15 Pro, iOS 17.4")
  • Примерное местоположение последнего входа (по IP через GeoIP2 или ipapi)
  • Дата и время последней активности
  • Текущее устройство помечается отдельно
data class DeviceSession( val sessionId: String, val deviceName: String, val deviceType: DeviceType, // IOS, ANDROID, WEB val location: String?, // "Москва, Россия" val lastActiveAt: Instant, val createdAt: Instant, val isCurrentDevice: Boolean ) 

Текущее устройство определяется так: при запросе списка сессий backend сравнивает device_id из JWT с device_id каждой сессии. Сессию текущего устройства нельзя завершить с этого же экрана — только через явный logout.

Как защитить сессии от компрометации?

Завершение сессии — ключевой механизм. Backend отзывает refresh_token (удаляет из таблицы или помечает как revoked). Устройство с отозванной сессией при следующем запросе API или рефреше токена получает 401. Мобильное приложение обрабатывает 401 — перенаправляет на экран логина и очищает локальные данные.

Для немедленного эффекта (пользователь опасается компрометации) нужен более агрессивный механизм: при отзыве сессии backend отправляет silent push на это устройство с командой немедленного logout. На Android — FCM data message с action: "force_logout". На iOS — APNs background notification с content-available: 1. Время отзыва сессии сокращается до секунд — silent push обрабатывается быстрее.

Пример Firebase Function для отзыва сессии
// Firebase Function: при отзыве сессии async function revokeDeviceSession(sessionId: string, targetDeviceToken: string) { await db.collection('sessions').doc(sessionId).update({ revoked: true }); await admin.messaging().send({ token: targetDeviceToken, data: { action: 'force_logout', reason: 'session_revoked' }, android: { priority: 'high' } }); } 

По сравнению с подходом "только сброс токена", добавление silent push ускоряет реакцию на взлом в 5 раз — пользователь выходит из аккаунта за секунды, а не при следующем запросе.

Почему важно уведомлять о новых входах?

Безопасная практика: при логине с нового устройства отправлять push-уведомление на другие активные устройства пользователя: "Выполнен вход на устройстве Samsung Galaxy S24 из Москвы. Это были вы?" С кнопкой "Нет, завершить эту сессию". Это стандарт безопасности у банков и финтех-приложений. Реализация: после создания новой сессии backend итерируется по остальным fcm_token пользователя и отправляет уведомление.

Подход Описание Безопасность Сложность реализации
Только сброс токена Backend отзывает refresh_token Средняя: устройство узнает о завершении при следующем запросе Низкая
Сброс + silent push Дополнительно отправляется команда force_logout Высокая: logout происходит немедленно Средняя
Сброс + push + уведомления о новых входах Полный набор: уведомление при входе, возможность завершить Очень высокая: пользователь в курсе всех действий Высокая

Детали реализации для Android и iOS

На Android используем FCM data message с высоким приоритетом. На iOS — APNs background notification с ключом content-available. При получении в обоих случаях вызываем force logout без показа UI, если приложение в фоне. Подробнее в официальной документации: Apple Push Notification Service.

Платформа Сервис Тип сообщения Ключевые настройки
Android FCM data message priority: high, collapse_key: none
iOS APNs background notification content-available: 1, priority: 5

Что входит в наше предложение

Мы предоставляем готовую реализацию экрана сессий с бэкенд-логикой, включая документацию по API и интеграции push-уведомлений. Вы получаете доступ к репозиторию с кодом на Kotlin/Swift и обучение команды поддержке. Дополнительно — техническая поддержка в течение 30 дней после сдачи.

Экран управления сессиями + уведомления о новых входах + принудительный logout с push — 2-3 недели. Стоимость рассчитывается индивидуально.

Наш опыт — 5+ лет разработки мобильных приложений с высокими требованиями к безопасности. Выполнили более 50 проектов в сферах финтеха и банкинга. Мы гарантируем, что реализация пройдёт модерацию App Store и Google Play без замечаний. Закажите консультацию сейчас, чтобы обсудить ваш проект. Свяжитесь с нами для бесплатной оценки.