Этап планирования 2. Планирование ASP.NET параметров
Кит Ньюман и Роберт Мак-Мюррей
2.1. Параметры состояния сеанса
При посещении сайта клиенты, как правило, переходят от одной странице к другой и часто меняют некоторые из посещаемых страниц. Если требуется отслеживать страницы, которые пользователи просматривают, а также изменения, которые они вносят при посещении веб-сайта, следует настроить состояние сеанса.
Если для приложения включено состояние сеанса, пользователь получает уникальный идентификатор сеанса при его первом запросе веб-страницы из приложения ASP.NET. Данные состояния сеанса сохраняются на сервере одним из следующих способов:
- Внутри процесса. Состояние сеанса хранится в рабочем процессе, в котором выполняется приложение ASP.NET.
- Сервер состояний. Состояние сеанса хранится за пределами рабочего процесса, в котором выполняется приложение ASP.NET.
- SQL Server. Состояние сеанса хранится в базе данных SQL Server.
Примечание
Для данных о состоянии сеанса также можно настроить другое хранилище. (Этот вариант не рассматривается в данном руководстве.) В проекте Visual Studio 11 используется настраиваемое хранилище, поддерживающее SQL Server, SQL Compact и SQL Azure.
Данные состояния сеанса также можно сохранять на клиенте в файле cookie. Файл cookie — текстовый файл, содержащий данные, используемые для сохранения сведений о пользователе, таких как настройки пользователя и сведения о проверке подлинности пользователя.
Возможности хранения состояния сеанса более подробно описываются в следующих разделах.
- Сохранение состояния сеанса в процессе
- Сохранение состояния сеанса посредством сервера состояний
- Сохранение состояния сеанса с помощью SQL Server
- Режим cookie для состояния сеанса
Сохранение состояния сеанса в процессе
Режим сохранения состояния сеанса в процессе предусматривает сохранение данных состояния сеанса приложения ASP.NET в рабочем процессе, в котором выполняется приложение. Этот режим используется по умолчанию для IIS 8.
Преимущество сохранения состояния сеанса в процессе заключается в наиболее быстром доступе к данным состояния сеанса. Однако, по мере увеличения объема сохраненных данных требуется все больше памяти, что может привести к снижению производительности.
Прежде чем настраивать сохранение состояния сеанса в процессе, выясните, будет ли иметь место перезапуск процесса при использовании данных состояния сеанса. При перезапуске процесса происходит потеря всех данных о состоянии сеанса. Если приложения ASP.NET должны сохранять данные состояния сеанса, и скорость доступа к данным не является определяющим фактором, рекомендуется использовать режим состояния сеанса вне процесса для хранения этих данных.
Важно!
Для сохранения состояния сеанса в процессе должна быть запущена служба состояния Windows (Aspnet_state.exe). По умолчанию эта служба устанавливается при установке Windows Server® 2012 и настраивается для запуска вручную. Рекомендуется установить для этой службы тип запуска "Автоматически".
Если пользователь не запрашивает и не обновляет страницу в приложении ASP.NET в течение 20 минут, сеанс завершается по умолчанию. Поскольку объекты сеанса занимают память веб-сервера, рекомендуется уменьшить значение времени ожидания для экономии ресурсов.
Важно! Соблюдайте осторожность при настройке значения времени ожидания сеанса, так как данные, хранящиеся в объекте Session пользователя, теряются, когда пользователь не активен на веб-сайте в течение периода времени ожидания.
Если принято решение сохранять состояния сеанса в процессе, определите, будут ли также использоваться файлы cookie. Дополнительные сведения о файлах cookie см. в разделе Режим файлов Cookie для состояния сеанса.
Сохранение состояния сеанса посредством сервера состояний
A сервер состояний хранит данные состояния сеанса в памяти, не занятой рабочим процессом. Преимуществом этой конфигурации является то, что состояние сеанса сохраняется при перезапуске рабочего процесса приложения. Для приложений среднего размера рекомендуется использовать сервер состояний.
Сервер состояния зависит от службы состояний Windows (Aspnet_state.exe) и требует машинный ключ для проверки состояния сеанса через это соединение.
Если сервер состояний запущен на веб-сервере, содержащем приложения, для которых он хранит данные состояния, поддерживается конфигурация веб-сада. Для дополнительной защиты данных состояния сеанса можно использовать конфигурацию веб-фермы с отдельным сервером, который хранит состояние сеанса и предоставляет общий доступ для всех серверов фермы. Еще один подход заключается в использовании SQL Server для хранения данных о состоянии сеанса.
Важно! Служба состояния Windows (Aspnet_state.exe) должна быть запущена, чтобы состояние внутрипроцессного сеанса войлось в силу. По умолчанию эта служба устанавливается при установке Windows Server 2012 и настраивается для запуска вручную. Измените тип запуска на "Автоматически".
Если вы выбрали хранение состояния сеанса на сервере состояния, необходимо использовать следующие проектные решения.
- Определите строку подключения для сервера состояния.
- Укажите время ожидания подключения в секундах.
- Определите, следует ли включить сжатие.
- Определите, будут ли данные о состоянии сеанса храниться в файлах cookie. Дополнительные сведения о файлах cookie см. в разделе Режим файлов Cookie для состояния сеанса.
Сохранение состояния сеанса с использованием сервера SQL
Одним из способов хранения состояния сеанса вне процесса является хранение данных на сервере SQL. Преимущество этой конфигурации заключается в том, что состояние сеанса сохраняется даже при перезапуске рабочего процесса приложения, а также при отключении службы состояний Windows или веб-сервера.
Примечание
Этот вариант не поддерживает SQL Azure.
Если сервер SQL запущен на том же веб-сервере, где находятся приложения, для которых он хранит данные состояния, предусмотрена конфигурация веб-сада, оптимизирующая масштабируемость веб-сервера. Если сервер SQL работает на другом сервере, он поддерживает конфигурацию веб-фермы, что значительно повышает масштабируемость между несколькими серверами.
Важно!
Для сохранения состояния сеанса вне процесса должна быть запущена служба состояния Windows (Aspnet_state.exe). По умолчанию эта служба устанавливается при установке Windows Server 2012 и настраивается для запуска вручную. Измените тип запуска на "Автоматически".
Важно!
Прежде чем настраивать сервер SQL на хранение состояния сеанса, выполните на сервере сценарий InstallSqlState.sql. По умолчанию этот скрипт хранится в %systemroot%\Microsoft.NET\Framework\V4.0.30319
.
Если вы выбрали хранение состояния сеанса в базе данных SQL Server, используйте следующие проектные решения.
- Определите строку подключения для базы данных.
- Укажите время ожидания подключения в секундах.
- Укажите время ожидания повторного подключения в секундах.
- Определите, следует ли включить пользовательскую базу данных.
- Определите, следует ли включить сжатие.
- Определите, будут ли данные о состоянии сеанса храниться в файлах cookie. Дополнительные сведения о файлах cookie см. в разделе Режим файлов Cookie для состояния сеанса.
Режим сохранения состояния сеанса в файлах cookie
Один из способов отслеживания состояния сеанса для клиентов, которые подключаются к веб-серверу, — использовать файлы cookie. На веб-сервере можно включить использование файлов cookie, выключить их использование, а также выбрать поведение файлов cookie, определяемое браузером, используемым для подключения.
Файл cookie сеанса связывает сведения о сеансе с сведениями о клиенте для данного сеанса. Сеанс — это длительность подключения пользователя к сайту. Файл cookie передается вместе со всеми запросами между клиентом и веб-сервером в заголовке HTTP.
Использование файлов cookie для отслеживания состояния сеанса более эффективно, чем любой другой метод, не использующий файлы cookie, так как файлы cookie не требуют перенаправления. Кроме того, они позволяют пользователям создавать закладки веб-страниц и сохраняют состояние, если пользователь покидает один сайт и переходит на другой, а затем вновь возвращается на первый сайт. Единственный недостаток этого метода заключается в том, что пользователи могут отключить файлы cookie в браузере.
Режим использования файлов cookie профиля устройства приводит к тому, что браузер будет использовать файлы cookie, если браузер поддерживает файлы cookie; в противном случае файлы cookie не используются. Если в профиле устройства указана поддержка файлов cookie, они используются независимо от того, отключил ли пользователь поддержку файлов cookie.
Важно!
При применении режима cookie "Использовать профиль устройства" включите повторное создание идентификаторов истекших сеансов. Это позволит веб-серверу повторно создавать маркеры при истечении периода ожидания, что сокращает время, в течение которого злоумышленник может перехватить файл cookie и получить доступ к содержимому веб-сервера.
Режим cookie Автоматическое обнаружение предписывает мобильным устройствам использовать файлы cookie, если их профиль поддерживает файлы cookie. В противном случае файлы cookie не используются. Для браузеров настольных компьютеров, которые поддерживают файлы cookie, ASP.NET пытается использовать файлы cookie при включении поддержки файлов cookie в браузере. Если поддержка файлов cookie отключена, состояние сеанса сохраняется в URL-адресе.
Важно!
При применении режима cookie "Автоматическое обнаружение" включите повторное создание идентификаторов истекших сеансов. Это позволит веб-серверу повторно создавать маркеры при истечении периода ожидания, что сокращает время, в течение которого злоумышленник может перехватить файл cookie и получить доступ к содержимому веб-сервера. Рекомендуется установить значение времени ожидания, меньшее, чем значение по умолчанию (20 минут).
Можно настроить состояние сеанса без использования файлов cookie. При использовании универсального кода ресурса (URI) для обработки состояния сеанса идентификатор сеанса внедряется в запрос URI в виде строки запроса, после чего URI перенаправляется на первоначально запрошенный URL-адрес. Измененный запрос URI используется в течение всего сеанса, чтобы не было необходимости в файле cookie.
Важно!
При применении URI включите повторное создание идентификаторов истекших сеансов. Это позволит веб-серверу повторно создавать маркеры при истечении периода ожидания, что сокращает время, в течение которого злоумышленник может перехватить файл cookie и получить доступ к содержимому веб-сервера.
Применение URI для отслеживания состояния сеанса позволяет избежать недостатков файлов cookie, включая проблемы с поддержкой браузеров и возможность отключения файлов cookie пользователями. Вместе с тем, использование URI имеет следующие недостатки.
- Нельзя использовать абсолютные URL-адреса без потери состояния сеанса. Это означает, что если пользователь переходит к другому приложению, а затем возвращается к предыдущему, введенных пользователем данных больше нет на странице.
- Пользвоатели не могут создавать закладки страниц, так как при этом теряются данные состояния сеанса.
Если для хранения состояния сеанса выбраны файлы cookie, используйте следующие проектные решения.
- Выберите режим cookie: автообнаружение, использование файлов cookie, использование профиля устройства или URI.
- При выборе любого варианта, кроме URI, следует указать имя файла cookie.
- При выборе любого варианта, кроме URI, следует указать срок действия файла cookie в минутах.
- При выборе любого варианта, кроме файлов cookie, укажите, следует ли повторно создавать идентификатор истекшего сеанса.
2.2. Параметры страниц и элементов управления
Страницы ASP.NET включают дополнительные элементы, которые ASP.NET распознает и обрабатывает при запуске страницы. Страницы ASP.NET могут также содержать настраиваемые, многократно используемые элементы управления. Такие настраиваемые элементы управления обрабатываются на сервере. Это позволяет использовать код сервера для задания свойств веб-страниц ASP.NET.
Примечание
Данные параметры применимы только к веб-формам ASP.NET. Они не применяются к ASP.NET MVC и веб-страницам ASP.NET.
IIS 8 позволяет настроить следующие параметры страницы ASP.NET и пользовательских элементов управления:
- Параметры поведения. Например, сохраняет ли веб-страница свое состояние просмотра и состояние представления любых серверных элементов управления, содержащихся в ней, по завершении текущего запроса страницы.
- Общие параметры: например, пространства имен, включенные для всех страниц.
- Параметры компиляции: например, компилируются или интерпретируются страницы.
- Службы: например, указывает, включено ли состояние сеанса.
IIS 8 предоставляет параметры по умолчанию для ASP.NET страниц и элементов управления, но при необходимости их можно изменить. Например, можно указать файл главной страницы сайта или включить состояние просмотра.
Пользовательские веб-элементы управления являются компилируемыми компонентами, которые выполняются на сервере и инкапсулируют интерфейс пользователя и другие связанные функциональные возможности в пакеты многократного использования. В IIS 8 можно указать префикс тега и сопоставление пространств имен для пользовательского элемента управления, который можно использовать на нескольких страницах в приложении.
Если требуется указать префикс тега или сопоставление пространства имен для настраиваемого элемента управления, используемого на нескольких страницах приложения, добавьте настраиваемый элемент управления.
Примечание
При добавлении параметра конфигурации параметр добавляется на локальном уровне и на всех дочерних уровнях, наследующих параметр.
Если принято решение использовать настраиваемые элементы управления ASP.NET, для каждого элемента управления, который требуется настроить, необходимо указать следующие сведения.
- Указание префикса тега элемента управления.
- Указание пространства имен .NET элемента управления.
- Указание сборки, в которой находится элемент управления.
2.3. Параметры приложения
Настройка параметров приложений при необходимости хранения пар ключ/значение осуществляется в рамках конфигурации в файле Web.config. Параметры приложения обеспечивают простой и быстрый доступ к сохраненным данным конфигурации приложения.
Для управления настраиваемыми элементами управления можно использовать список всех настраиваемых элементов управления для определенного уровня конфигурации. Этот список можно сортировать по префиксу тега, источнику или сборке, а также области применения (локально или с наследованием). Также можно сгруппировать элементы управления по области применения, чтобы определить, какие настраиваемые элементы управления находятся на текущем уровне конфигурации, а какие унаследованы от родительского уровня.
Если требуется указать префикс тега или сопоставление пространства имен для настраиваемого элемента управления, используемого на нескольких страницах приложения, добавьте настраиваемый элемент управления.
Примечание
При добавлении параметра конфигурации параметр добавляется на локальном уровне и на всех дочерних уровнях, наследующих параметр.
Если принято решение использовать параметры приложения, для каждого параметра, который требуется настроить, необходимо указать следующие сведения.
- Имя параметра.
- Значение параметра.
2.4. Параметры компиляции .NET
Для обслуживания запросов от пользователей кодом приложения этот код сначала должен быть скомпилирован ASP.NET в одну или несколько сборок. Сборки представляют собой файлы с расширением DLL. Настройте параметры компиляции .NET в IIS 8, если вы хотите управлять компиляцией кода ASP.NET.
IIS позволяет настроить следующие параметры компиляции .NET/
- Параметры пакета, такие как максимальный размер файла, который может быть включен в пакет, и максимальное число страниц для одной пакетной компиляции.
- Параметры поведения, например количество выполняемых процедур динамической компиляции перед повторным запуском приложения.
- Общие параметры, например язык, который по умолчанию используется в файлах динамической компиляции.
2.5. Параметры глобализации .NET
Глобализация — это процесс интернационализации кода приложения с последующей локализацией приложения для использования в странах с другими региональными и языковыми стандартами. Процесс интернационализации позволяет переводить, сохранять, запрашивать и представлять содержимое приложения в виде, адаптированном для любого региона, при этом везде, где это возможно, использовать единый базовый код приложения. Языковой стандарт — сочетание языка и региональных особенностей. Сюда относится представление даты, времени, валюты, телефонных номеров и т. д. Локализация означает адаптацию приложения к другим языковым стандартам путем перевода и форматирования содержимого в соответствии с языком и региональными параметрами, по возможности без изменения кода приложения.
Чтобы параметры глобализации для приложений ASP.NET применялись ко всем приложениям на сервере, их следует настраивать на уровне сервера. Можно также настраивать параметры глобализации ASP.NET для узлов, приложений, каталогов и файлов.
IIS позволяет настроить следующие параметры глобализации.
- Язык и региональные параметры, включая язык и параметры пользовательского интерфейса.
- Параметры кодировки, такие как кодировка заголовков ответа.
Примечание
Изменение параметра конфигурации происходит на локальном уровне, а также на всех дочерних уровнях, наследующих параметр.