1. Допустим, мы хотим держать пользователя залогиненным долгое время (месяц или больше). Что у нас меняется на одном и том же устройстве? Только IP.
Привяжите в генерацию HASH-ключа hash(logonName+UserAgent+password).
Логику используйте
https://ru.wikipedia.org/wiki/CRAM-MD5
2. Храните основные данные пользователя в сессии (сохранить сразу после авторизации).
При выполнении важных операций делайте проверку на бан из базы данных.