Работа с сессиями odoo при активной разработке

Оглавление

Сессия

Сессия в odoo называются все запросы, которые подписаны одним идентификатором. Этот идентификатор выдается вам, когда вы заходите первый раз на страницу системы. Если вы ввели логин и пароль, то у вас будет авторизованная сессия. В первую очередь это нужно для того, чтобы при работе системы все запросы можно было автоматически идентифицировать и предоставить соответствующий доступ запросу, который отравился в систему с вашим идентификатором.

Сессия сочетает в себе ряд параметров, которые позволяют однозначно автоматически идентифицировать любой ваш запрос. Вот эти параметры:

  • наличие самого идентификатора сессии
  • время действия идентификатора сессии
  • база данных
  • пользователь

О чем говорят эти параметры? Они говорят следующее:

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

Технические особенности

Для того, чтобы вы могли использовать несколько вкладок для просмотра одного и того же ресурса (например просмотр нескольких карточек с различными товарами в одном магазине) браузеры предоставляют доступ к файлам куков для одного сайта из всех открытых вкладок. Т.е. любая открытая вкладка при обращении, например к нашему адресу 127.0.0.1:8069 автоматически получит доступ к идентификатору сессии, который уже получила предыдущая открытая вкладка.

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

Это обусловлено тем, что система odoo при открытии новой вкладки автоматически считывает к себе идентификатор сессии и при последующих обращения к серверу она не обращается к кукам, а использует полученных идентификатор из памяти. В этом случае вкладки являются изолированными друг от друга процессами. И поэтому, когда у нас осталась висеть вкладка, которая запомнила старую куку и вы ее не удалили, то при создании новой базы или переключении пользователя вы будете получать частые вылеты из сеанса. Рецептом от такого поведения является - закрытие всех вкладок с odoo, которые относятся к нужному вам адресу, в случае разработки это - 127.0.0.1:8069.

Советы для начинающих разработчиков

Чтобы избежать проблемного поведения я использую следующий подход - веду разработку системы всегда в режиме инкогнито. Это позволяет использовать уже открытый браузер для поиска в интернете, а все рабочие сеансы odoo находятся в соседнем окне в режиме инкогнито. Если я запутался с сеансами, мне достаточно закрыть все окна в режиме инкогнито и таким образом, профиль, который создается при открытии первого окна в режиме инкогнито будет удален. И открыть новое окно в режиме инкогнито, для него будет создан новый профиль и я могу спокойно авторизоваться не боясь, что у меня где-то застряли идентификаторы сеанса в одной из вкладок. Тут обязательно закрывать именно все окна в режиме инкогнито, потому что при создании нового окна в режиме инкогнито не создается новый профиль а используется тот, который был создан при открытии самого первого окна в режиме инкогнито.

Так же вы можете использовать несколько профилей, это может показаться сложным на первый взгляд, но есть плагины которые облегчают эту задачу

Обсуждение

Обсудить, указать на ошибки и опечатки можно здесь