Я как-то написал свою реализацию аутентификации:
При старте новой сессии генерируется sessionId (uuid) и synctoken (uuid) и session token который содержит в себе: payload:{sessionid, ... }, synctoken, sessionTokenCreationTime, sessionTokenExpTime, sessiontokenSign основанный на предыдущей части.
Клиенту отдается sessiontoken в куках и synctoken в headers. Sessiontoken обновляется в течение заданной на сервере константы, допустим 15 минут, и вместе с ним выпускается новый synctoken. SessionId при этом не обновляется. SessionTokenExp это по сути время через которое sessiontoken уже не сможет обновляться и придется перелогинится. Обычно это время большое, хоть полгода, но ты можешь сделать и 20 минут.
Может тебе подходит это решение. SessionId по сути можно и не хранить. Но я тогда не знаю как ограничивать кол-во сессий на аккаунте.