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