Ок. Механизм таков.
Работая в системе менеджер выбирает клиента. И менеджер и клиент - запись в таблице users.
Если REMOTE_USER это users.id менеджера то SELECTED_USER это users.id клиента.
Выбор клиента - я получаю список <a href=“/set_user?user=number”></a>, нажав на определенную запись выполняю следующее:
session = Session.query(User).get('request.GET')
session.save()
далее в приложении исхожу из session с кем предстоит работать, пока менеджер не выберет нового клиента.
Остальной код это выбор значений из базы и запись значений в базу которые относятся к клиенту
Изначально я грешил на работу Beaker, мол неверно хранит сессионные данные (еще и его частые обновления…), но когда утром во время “залогинивания” один из менеджеров получил окно приветствия другого, я начал сомневаться.
Потом сомнениям подверглась работа сервера Paste, я проверил нет ли в сети прокси (прозрачных, кеширующих), я перестроил приложение на apache2+mod_wsgi. Удалось определить, что “перебросы” на другие сессии (за сессию считаю сеанс другого менеджера и данные с которыми он работает) случается по время одновременного вызова одного шаблона или действия. Грубо говоря, если одновременно находясь в шаблоне выбора клиента выбрать какую то запись одновременно с “менеджером 2”, можно увидеть окно “менеджера 2”. Если кешироваться данные на стороне клиента не могут, получается неверно работает Web-Server, будь то Apache или Paster. Ошибочный шаблон отдается моментально (при смене данных обычно 1 секунду, пока выберет данные из базы и т.п., чувствуется, что система “работает”, а тут моментально).
Полностью показать исходники приложения не могу ибо на меня подадут в суд. Хотя думаю проблема кроется не в моем коде, а в работе именно pylons-окружения. Может
http://pythonpaste.org/paste-httpserver-threadpool.html или еще что я настроил неверно, ну там load_environment() или middleware (сейчас по примеру из pylonsbook)