Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
У Session-переменных есть и другой, более существенный недостаток. Он проистекает из того, как ColdFusion управляет этими переменными. Может случиться так, что ColdFusion спутает разные потоки для различных браузеров, и переменные, установленные для одного браузера будут использованы в другом потоке, где обрабатываются запросы от второго браузера. Эта проблема возникает не только для Session-переменных, но для всех переменных application- и server-области определения. Allaire называет эти переменные «shared scope» (переменные разделяемой области видимости).
Почему это происходит?
В процессе работы ColdFusion сервер способен обрабатывать одновременно несколько запросов, выполняя каждый из них в отдельной области памяти. Приложения, которые могут выполнять одновременно несколько запросов, называются многопоточными («multithreaded applications») приложениями. То есть поток – это отдельная область памяти.
Проблема повреждения данных возникает, когда в многопоточном приложении возникает попытка одновременного доступа к «shared scope»-переменным. Решение проблемы заключается в ограничении доступа к переменным так, чтобы, пока ColdFusion-сервер обрабатывает «shared scope»-переменную, ни один другой процесс не мог бы к ней обратиться. Подобный запрет временно превращает ColdFusion-сервер в однопоточное приложение. То есть проблема заключается не столько в самом ColdFusion, сколько в небрежности программиста, не предусмотревшего возможности одновременного обращения разных клиентов к одним и тем же данным. Ограничение доступа к переменным достигается использованием тега <cflock>.
Этот тег имеет несколько атрибутов:
n name – в основном используется для обратной совместимости версий или для специальных случаев, которые для данного случая не имеют значения;
n scope – определяет одну из разделяемых областей видимости (shared scopes): session, application или server;
n timeout – время, в течение которого программа должна пытаться получить подтверждение блокировки (время ожидания может возникнуть в случае, если другой <cflock> уже успешно заблокировал сервер);
n throwontimeout – логическое значение (Yes/No), определяет, нужно ли генерировать событие ошибки при невозможности получить блокировку по истечении времени timeout. При использовании этого параметра вы наверняка захотите поместить свой <cflock>-код в блок <cftry><cfcatch>;
n type – «readonly» или «exclusive». Блокировка типа Readonly на самом деле не совсем блокировка. Ее лучше сравнить со своего рода телохранителем: если какой-нибудь другой процесс попытается получить блокировку, этот тип блокировки воспрепятствует или, лучше сказать, не допустит этого. Блокировка Readonly используется, когда нет нужды изменять значение переменных из shared scope области видимости. Блокировка Readonly существенно улучшает быстродействие по сравнению с Exclusive-блокировкой. Блокировку Exclusive следует использовать во всех случаях, когда требуется создать, изменить или удалить «shared scope»-переменные.