Проблема кеширования переменных в системах на mod_perl

Статьи  Проблема кеширования переменных

История

При настройке работы Системы под mod_perl «почему-то» иногда не передавалось на следующую форму состояние Системы, т. е. ты видишь, что перешёл на форму, а в меню отображается что-то совсем другое. Иногда это лечилось несколькими обновлениями страницы.

Ещё иногда Система «забывала» пользователя, под которым работала, и выдавала ошибку отсутствия прав или вызова несуществующей или недопустимой функции.

Долгое время мы не знали, как подступиться к этой проблеме.

Исследования

При вызове Системы происходит запуск «главного» файла, в который подключаются все остальные модули Системы (по необходимости), после чего параметры CGI переписываются (в разными подчистками) в объект CGI::Session и глобальных хэшей и переменных. Затем, после вычисления прав пользователя, вызывается действие, если оное запрашивалось, потом нужная форма.

Действие — это метод одного из модулей Системы (типа Page::add_page). Модули используют глобальные хэши.

Так вот, исследования показали, что при вычислении прав в «главном» файле мы пытаемся использовать переменную из одного из модулей, причём, иногда она уже присутствовала, а иногда — нет.

В итоге, когда сия переменная присутствовала, всё было нормально, а вот когда нет, шли разного рода сбои, вроде «забывания» Системой прав пользователя, ошибок переходов и т. д.

Решение

Было решено пойти самым простым путём — сделать undef $modules::Module::var (my $modules::Module::var делать нельзя: переменная не из main). И уже дальше работать с присутствующей переменной. Ибо побочным эффектом этой операции является то, что Perl автоматически заводит нужную переменную в модуле (этот эффект также известен под названием автооживления (auto-viviciation), если не ошибаюсь).

Авторизация

Логин
Пароль
 

Регистрация

Забыли пароль?

Новые темы на форуме

Все темы

Работает на 4Site CMS

© 2006, ООО «Метод Лаб»

Сделано в Method Lab

На главную Modperl
Поиск по сайту: 
Главная страница сайта ModperlПосмотреть карту сайта Modperl

Новости

Ча. во.

Форум

Статьи