Сабж. Как правильней и оптимальней это реализовывать? Вот есть у меня сервер-сайд и фронт-сайд. На сервере все RequestHandler-ы унаследованы от одного класса, где в «при начале каждого запроса» (prepare в Tornado) я проверяю куку на содержание session_id, если ее нет, то сохраняю в БД. Если пользователь логинится, то я в эту строку таблицы БД еще и ссыль на пользователя добавляю.
На фронте у меня меню приложения, где в зависимости от того, залогинен ли пользователь, выводятся либо «Зарегиться/Войти», либо уже меню пользователя. Соответственно, при каждом рендере меню дергается url на сервере, который отдает либо 200, либо 403, в зависимости от того, залоген ли пользователь, и не просрочена ли сессия. Плюс к тому, каждый реквест к серверу сопровождается анализом кода ответа, и если 403, то редиректит на страницу логина (кроме общедоступных url).
Вроде все логично, но при таком подходе, я где-то, наверное, переборщил с проверками сессии, и поимел дублирование строк в БД.
Т.е. когда я искусственно делаю сессию просроченной, а потом пытаюсь вызвать приватный раздел сайта (и ловлю редирект), то в БД мне создает несколько новых строк в таблице сессий, но первая из них привязывается к пользователькой, она потом становится основной, когда я логинюсь.
Немного сумбурно написал, не ругайте.
PS. Пишу на Tornado. Не знаком с Flask, не знаю, как там с сессиями, но, думаю, подписанным на него будет интересен тред.