Проект A
Устаревшая система
Полнофункциональный сервер Django на основе языка шаблонов
Использование сеансов для аутентификации
Python версии 3.8
Django версии 3.2
Проект B
Новый проект
Django на основе JSON Сервер RESTful API
Использование JWT и сеансов для аутентификации
Python версии 3.11
Django версии 5.0
База данных: MariaDB
В настоящее время мы миграция из устаревшего проекта A в проект B. В ходе этого процесса мы переключили метод аутентификации на JWT, но, поскольку вся устаревшая система еще не была перенесена, мы сохраняем параллельно с ней метод сеанса. Оба проекта используют UserenaAuthenticationBackend и используют django.contrib.auth.authenticate и django.contrib.auth.login для входа в систему.
В этом состоянии пользователи могут войти в систему, используя либо проект A, либо проект B. , который использует одну и ту же базу данных. Возникают следующие проблемы:
КАК ЕСТЬ
- Вход в А из одного браузера -> Вход в систему B из другого браузера -> Пользователь выходит из A в первом браузере.
- Вход в B из одного браузера -> Вход в A из другого браузера -> Пользователь выходит из B в первом браузере.
- Вход в A из одного браузера -> Вход в A из другой браузер -> Пользователь остается авторизованным в A в первом браузере.
- Вход в B из одного браузера -> Вход в B из другого браузера -> Пользователь остается авторизованным в B в первом браузере.
Цель состоит в том, чтобы пользователь оставался в системе на протяжении нескольких сеансов, независимо от того, входит ли он в систему из разных проектов или браузеров.
Подозрительная часть
SESSION_COOKIE_NAME унифицирован с тем же значением имени.
Я подозревал, что эта проблема может быть связана с различиями версий, но помимо изменения формата session.encode в Django 4.0, которая была связана с изменением алгоритма по умолчанию на SHA1, существенных изменений не произошло. И проект A, и проект B используют SHA256, так что, похоже, это не является причиной.
Сроки сеансов в базе данных не истекли. Сеансы создаются для каждого браузера, но при повторном входе в систему сеанс соответствующего браузера перезаписывается, а не истекает срок действия других сеансов (даты истечения срока действия остаются неизменными).
Подробнее здесь: https://stackoverflow.com/questions/786 ... nd-session