Шаг планирования 2. Планирование параметров ASP.NET

Кит Ньюман и Роберт Макмюррей

2.1. Параметры состояния сеанса

Когда клиенты посещают сайт, они обычно переходят с одной страницы на другую и часто изменяют некоторые страницы, которые они посещают. Если вы хотите отслеживать страницы, которые пользователи просматривают, и изменения, внесенные во время посещения веб-сайта, настройте состояние сеанса.

Если для приложения включено состояние сеанса, пользователь получает уникальный идентификатор сеанса при первом запросе на веб-страницу из приложения ASP.NET. Данные о состоянии сеанса хранятся на сервере одним из следующих способов:

  • В процессе: состояние сеанса хранится в рабочем процессе, где выполняется приложение ASP.NET.
  • State Server: состояние сеанса хранится вне рабочего процесса, в котором выполняется приложение ASP.NET.
  • SQL Server: состояние сеанса хранится в базе данных SQL Server.

Замечание

Вы также можете настроить пользовательское внешнее хранилище для данных состояния сеанса. Однако она выходит за рамки этого руководства. Проект Visual Studio 11 использует пользовательское хранилище для поддержки SQL Server, SQL Compact и SQL Azure.

Данные о состоянии сеанса также могут храниться на клиенте в файле cookie. Файл cookie — это текстовый файл, содержащий данные, используемые для хранения сведений о пользователе, таких как параметры пользователя и сведения о проверке подлинности пользователя.

В следующих разделах подробно описаны параметры хранения состояния сеанса.

Хранение состояния сеанса в процессе

В режиме состояния сеанса внутри процесса хранятся данные о состоянии сеанса для приложения ASP.NET в рабочем процессе, где выполняется приложение. Этот режим используется по умолчанию для IIS 8.

Преимущество использования состояния сеанса в процессе заключается в том, что он обеспечивает самый быстрый доступ к данным состояния сеанса. Однако при хранении большего объема данных в сеансе требуется больше памяти, что может замедлить производительность сервера.

Прежде чем настраивать состояние сеанса в процессе, рассмотрите влияние перезапуска рабочего процесса на данные состояния сеанса. Если рабочий процесс перезапускается, все данные состояния сеанса теряются. Если ваши ASP.NET приложения должны сохранять данные о состоянии сеанса и если скорость доступа к данным не является основной задачей, рассмотрите возможность использования режима состояния сеанса вне процесса для хранения этих данных.

Это важно

Служба состояний Windows (Aspnet_state.exe) должна быть запущена для того, чтобы состояние сеанса в процессе обработки вступило в силу. По умолчанию эта служба устанавливается при установке Windows Server® 2012 и настроена для запуска вручную. Рекомендуется изменить поведение запуска на "Автоматически".

По умолчанию срок действия сеанса истекает, когда пользователь не запрашивал или не обновлял страницу в приложении ASP.NET в течение 20 минут. Так как объекты сеансов используют память на веб-сервере, рекомендуется уменьшить время ожидания для экономии ресурсов.

Важно. Будьте осторожны при настройке значения времени ожидания сеанса, так как сведения, хранящиеся в объекте сеанса пользователя, теряются, когда пользователь не активен на веб-сайте в течение периода ожидания.

Если вы решите использовать хранилище состояния сеанса в процессе, решите также, следует ли использовать файлы cookie. Дополнительные сведения о файлах cookie см. в режиме cookie для состояния сеанса.

Хранение состояния сеанса с помощью сервера состояний

Сервер состояний поддерживает дату состояния сеанса в памяти, которая находится за пределами рабочего процесса. Преимущество этой конфигурации заключается в том, что состояние сеанса сохраняется при перезапуске рабочего процесса приложения. Для средних приложений рекомендуется использовать сервер состояний.

Сервер состояния зависит от службы состояний Windows (Aspnet_state.exe) и требуется ключ компьютера для проверки состояния сеанса через подключение.

Если сервер состояния работает на том же веб-сервере, где содержатся приложения, для которых он поддерживает состояние, конфигурация веб-сада поддерживается. Для повышения защиты данных о состоянии сеанса рекомендуется использовать конфигурацию веб-фермы с отдельным сервером, который хранит состояние сеанса и совместно использует его среди всех серверов в ферме. Другим подходом является использование SQL Server для поддержания состояния сеанса вне процесса.

Важно: служба состояний Windows (Aspnet_state.exe) должна выполняться для того, чтобы внутренний процесс состояния сеанса вступал в силу. По умолчанию эта служба устанавливается при установке Windows Server 2012 и настроена для запуска вручную. Измените поведение запуска на "Автоматически".

Если вы решите сохранить состояние сеанса с помощью сервера состояний, примите следующие решения по проектированию:

  • Определите строку подключения для сервера состояния.
  • Укажите количество секунд, ожидаемых до истечения времени ожидания подключения.
  • Определите, следует ли включить сжатие.
  • Решите, следует ли хранить данные о состоянии сеанса в файле cookie. Дополнительные сведения о файлах cookie см. в режиме cookie для состояния сеанса.

Хранение состояния сеанса с помощью SQL Server

Один из типов внепроцессного состояния сеанса использует SQL Server для хранения данных о состоянии сеанса. Преимущество этой конфигурации заключается в том, что состояние сеанса сохраняется, несмотря на перезапуск рабочего процесса приложения, или если служба состояния Windows или веб-сервер выходит из строя.

Замечание

Этот параметр не поддерживает SQL Azure.

При работе SQL Server на том же веб-сервере, где работают приложения, для которых он сохраняет состояние, поддерживается конфигурация веб-сада, что увеличивает масштабируемость веб-сервера. При запуске SQL Server на другом сервере она поддерживает конфигурацию веб-фермы, которая значительно повышает масштабируемость между группой серверов.

Это важно

Служба состояния Windows (Aspnet_state.exe) должна быть запущена, чтобы внепроцессное состояние сеанса вступало в силу. По умолчанию эта служба устанавливается при установке Windows Server 2012 и настроена для запуска вручную. Измените поведение запуска на "Автоматически".

Это важно

Перед настройкой SQL Server для состояния сеанса запустите скрипт 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 не используются. Для настольных браузеров, которые известны своей поддержкой файлов 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. Параметры приложения обеспечивают быстрый и простой доступ к хранимым данным конфигурации для приложения.

Для управления пользовательскими элементами управления можно просмотреть список, содержащий все пользовательские элементы управления для определенного уровня конфигурации. Этот список можно сортировать по префиксу тега, источнику или сборке или области (локальной или унаследованной). Вы также можете группировать элементы управления по области, чтобы узнать, какие пользовательские элементы управления применяются на текущем уровне конфигурации и какие пользовательские элементы управления наследуются от родительского уровня.

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

Замечание

Добавление параметра конфигурации добавляет параметр на локальном уровне и в любые дочерние уровни, наследующие этот параметр.

Если вы решите настроить параметры приложения, вам потребуется следующая информация для каждого параметра, который требуется настроить:

  1. Укажите имя параметра.
  2. Укажите значение параметра.

2.4. Параметры компиляции .NET

Чтобы код приложения мог обслуживать запросы пользователей, ASP.NET сначала должна скомпилировать код в одну или несколько сборок. Файлы сборок имеют расширение имени файла .dll. Настройте параметры компиляции .NET в IIS 8, если требуется управлять компиляцией кода ASP.NET.

Службы IIS позволяют настроить следующие параметры компиляции .NET:

  • Параметры пакетной обработки, такие как максимальный размер файла, который можно обрабатывать, и максимальное количество страниц, которые можно включить в каждую пакетную компиляцию.
  • Параметры поведения, такие как количество динамически скомпилированных ресурсов перед перезапуском приложения.
  • Общие параметры, такие как язык программирования по умолчанию, используемый в динамических файлах компиляции.

2.5. Параметры глобализации .NET

Глобализация — это процесс интернационализации кода приложения, а затем локализация приложения на другие языки и региональные параметры. Процесс интернационализации позволяет переводить, хранить, извлекать и представлять содержимое приложения для любого языкового стандарта, используя ту же базу кода приложения, когда это возможно. Локаль — это сочетание языковой и культурной среды. К ним относятся форматы дат, время, валюты, номера телефонов и т. д. Локализация означает адаптацию приложения к другим языковым стандартам путем преобразования и форматирования содержимого в соответствии с языком и региональными параметрами, предпочтительно без касания кода.

Вы можете изменить параметры глобализации для приложений ASP.NET на уровне веб-сервера, если они будут применяться ко всем приложениям ASP.NET на сервере. Вы также можете изменять параметры глобализации ASP.NET для сайтов, приложений, каталогов и файлов.

Службы IIS позволяют настроить следующие параметры глобализации:

  • Параметры, такие как язык пользовательского интерфейса или культура интерфейса пользователя.
  • Параметры кодирования, такие как кодировка для заголовков ответа.

Замечание

Изменение параметра конфигурации изменяет параметр на локальном уровне и для всех дочерних уровней, наследующих этот параметр.