В ASP.Net предоставляет два типа
Преимущества хранения информации на стороне клиента:
ViewState или состояние отображения – отслеживает значения элементов управления;ControlState или состояние элемента управления – применяется при создании пользовательских элементов управления, как правило, используется для корректной работы пользовательского ЭУ, даже в случае отключения ViewState ;Cookie – файлы – эти файлы хранят введенные в браузер значения, которые браузер отсылает на сервер при последующих запросах данной страницы;View State —называется способ хранения данных о состоянии страницы в
Чтобы отключить состояние отображения веб-элемента управления, присвойте его свойству EnableViewState значение False. Это ускорит обработку данных на сервере и уменьшит размер страницы.
Также можно откоючить и на уровне страницы:
<%@ Page EnableViewState="false" %>
Важно следующее: по – умолчанию, состояние отображение включено у каждого элемента управления, что не всегда хорошо. Прежде всего, при использовании страница становится "тяжелее", как для обработки, так и для передачи клиенту, из-за дополнительного объема. Далее, дополнительная нагрузка связана с формированием и разбором данных . И, наконец, для обработки View State все-таки требуется память на сервере.
Поэтому перед началом разработки следует определиться с тем на каких страницах использование необходимо, для остальных же, лучше состояние отображения отключить.
В случае, если в планируется хранить конфиденциальные данные (чего, строго говоря, следует, при возможности, избегать), можно включить шифрование
Чтобы включить шифрование состояния отображения в приложении, в файле Web.config присвойте атрибуту <pages viewStateEncryptionMode> значение Always:
<configuration> <system.web> <pages viewStateEncryptionMode="Always"/> </system.web> </configuration>
Запись данных
В объект можно добавлять пользовательские значения. В следующем примере после проверки наличия объекта , записывается дата последнего посещения пользователя:
if (ViewState["lastVisit"] != null)
{
Labell.Text = (string)ViewState["lastVisit"];
}
else
{
Labell.Text = "lastVisit ViewState not defined.";
}
ViewState.Add("lastVisit", DateTime.Now.ToString());
Чтение данных
В следующем примере после проверки наличия объекта , отображается дата последнего посещения страницы пользователем:
// Проверка наличия объекта ViewState
if (ViewState["lastVisit"] != null)
{
Labell Text = ((DateTime)ViewState["lastVisit"]).ToString();
}
else
{
Labell.Text = "lastVisit ViewState not defined";
}
ViewState["lastVisit"] = DateTime.Now;
Обычно ControlState используется для того, чтобы элемент управления работал корректно в случае EnableViewState = false. Если на работу вашего ЭУ никак не влияет – то нет смысла применять ControlState.
В следующем примере кода демонстрируется, каким образом класс, производный от класса
public override void Load()
{
Stream stateStream = GetSecureStream();
StreamReader reader = new StreamReader(stateStream);
IStateFormatter formatter = this.StateFormatter;
string fileContents = reader.ReadToEnd();
Pair statePair = (Pair)formatter.Deserialize(fileContents);
ViewState = statePair.First;
ControlState = statePair.Second;
reader.Close();
stateStream.Close();
}
Преимущества использования
Недостатки использования
Элемент управления HiddenField хранит единственную переменную в свойстве Value, он должен быть явно добавлен на страницу. POST (по щелчку кнопки), а не HTTP GET (по щелчку ссылки).
Пример сохранения данных:
HiddenFieldl.Value = control.Value.ToString();
Свойство HiddenField. Value имеет тип String, поэтому перед его установкой требуется преобразовать данные в тип String.
Cookie — это текстовая строка, включаемая в запросы и ответы HTTP (
Одно из главных назначений файлов cookie — предоставлять удобное средство экономии времени. Файлы cookie позволяют сообщить веб-узлу, что пользователь вернулся на конкретную страницу. Например, при обращении к личной веб-странице или при вводе регистрационных данных файлы cookie помогают серверу восстановить сведения, связанные с текущим пользователем. Это дает возможность упростить процесс сохранения персональных данных (например, адреса для доставки счетов или товара и т. д.). При повторном обращении на
Чтение и запись Cookie
Следующий пример кода (обработчика события Page_Load ) демонстрирует установку и чтение значения cookie с именем "lastVisit", содержащее значение текущего времени. Если у пользователя cookie уже установлен, код отобразит время последнего посещения страницы пользователем в элементе управления Labe1l. Если при посещении пользователем страницы из предыдущего примера cookie еще не установлен, код покажет сообщение "No value defined"
if (Request.Cookies["lastVisit"] != null)
{
Server.HtmlEncode(Request.Cookies["lastVisit"].Value);
}
else
{
Labell.Text = "No value defined";
}
// Установить cookie для следующего визита
Response.Cookies["lastVisit"].Value = DateTime.Now.ToString();
Response.Cookies["lastVisit"].Expires = DateTime.Now.AddDays(1);
Строки запроса обычно используется для хранения переменных, идентифицирующих страницы,
Строки запроса — простой, но ограниченный механизм хранения информации о состоянии между запросами страниц. Например, в строке запроса легко передать количество товара со страницы описания на страницу оформления заказа. Некоторые браузеры и устройства ограничивают длину URL 2083 символами. Другое ограничение состоит в необходимости отправки страницы командой HTTP GET, чтобы значения из строки запроса были доступны для обработки. Следовательно, запросы нельзя добавлять в целевые URL кнопок на формах.
Значения из строк запросов должны всегда проверяться на допустимость.
Для чтения значения строки запроса необходимо обратиться к набору Request.QueryStrings, как к cookie.
следующий код показывает значения параметров user, prefs и page из строки запроса в элементе управления Label1:
Labell.Text = "User: " + Server.HtmlEncode(Request.QueryString["user"]) + ", Prefs: " + Server.HtmlEncode(Request.QueryString["prefs"]) + ", Page: " + Server.HtmlEncode(Request.QueryString["page"]);
Необходимо всегда кодировать cookie и значения в строке запроса с помощью Server. Html Encode перед отображением значения на HTML-страницах. Server. HtmlEncode заменяет HTML-код специальными символами, которые веб-браузер в состоянии только отображать, но не обрабатывать.
Параметры для хранения сведений о странице на стороне сервера обычно обеспечивают большую степень безопасности, чем параметры на стороне клиента, однако они могут использовать больше ресурсов веб-сервера, что может привести к проблемам с масштабируемостью, если объем сохраняемой информации слишком велик. ASP.NET предоставляет несколько параметров для реализации
Параметры
Сохраняет значения в состоянии приложения — глобальной области памяти, доступной для всех страниц веб-приложения. Следовательно, состояние приложения можно применять для сохранения информации между запросами страниц и циклов обмена данными между клиентом и сервером.
Состояние приложения хранится в объекте-словаре Application (экземпляре класса HttpApplicationState ), который представляет собой набор пар "ключ—значение". К нему можно добавлять специфичную для приложения информацию, где она сохранится между запросами страниц. После введения такой информации в состояние приложения сервер обработает ее без участия клиента, причем она становится недоступной клиенту. Состояние приложения — один из лучших механизмов хранения информации, не специфичной для пользователей. Он позволяет всем страницам обращаться к одной копии данных, хранящихся в одной области памяти, а не к множеству отдельных копий.
Теоретически, любой может обратиться к объекту Application, поэтому хранящаяся в нем информация о пользователе уязвима с точки зрения безопасности.
Сохраненные в объекте Application данные теряются при перезапуске приложения. IIS обычно периодически перезапускает приложения ASP.NET, чтобы повысить надежность. При перезагрузке компьютера веб-приложения также перезапускается. Чтобы сохранить информацию в этих случаях, следует читать и записывать значения при обработке событий приложения
Контейнер Application является глобальным и доступным из всех страниц, http модулей и http хэндлеров веб-приложения. Он должен использоваться для сохранения информации общей для всего приложения. Application является коллекцией типа ключ-значение.
Использование состояния приложения:
Application["Message"] = "Some string"; Application["AppStartTime"] = DateTime.Now; string s = (string)Application["Message"]; DateTime startTime = (DateTime)Application["AppStartTime"];
Поскольку значения контейнера Application доступны из всех страниц, то в случае одновременного обращения нескольких потоков к одному значению возникает проблема синхронизации. В качестве решения используются два метода: Lock() и Unlock(). Вызов метода Lock заставляет ASP.NET блокировать все попытки доступа любых других потоков к любой информации из Application. Блокировка снимается вызовом метода Unlock.
Application.Lock(); Application["number"] = (int)Application["number"] + 1; Application.UnLock();
Одним из недостатков Application является неограниченное время жизни его объектов. Т.е. значения, записанные в эту коллекцию, будут в ней существовать до тех пор, пока они не будут явно удалены (методы Remove, RemoveAll, RemoveAt, присвоение null ).
// удаление SomeGlobalCounter из Application методом Remove
Application.Remove("SomeGlobalCounter");
// удаление SomeGlobalCounter из Application присвоением null
Application["SomeGlobalCounter"] = null;
В ином случае они будут существовать до завершения работы приложения либо перезагрузки веб-сервера.
HttpSessionState, в качестве метода хранения специфичной для сеанса информации, видимой только в пределах сеанса. В состоянии сеанса можно сохранять специфичные для сеанса значения и объекты; после этого
Контейнер Session похож на Application, с той лишь разницей, что для каждого пользователя приложения создается своя собственная сессия со своими собственными значениями. Для SessionID и состоящий только из ASCII-символов, которые допустимы для использования в URL. В зависимости от настроек веб-приложения, этот ключ сохраняется либо в Cookie либо включается как часть URL.
Пример:
Session["Message"] = "My string"; Session["SessionStartTime"] = DateTime.Now; string s = (string)Session["Message"]; DateTime startTime = (DateTime)Session["SessionStartTime"];
Коллекция StaticObjects является read-only коллекцией, ее элементы определяются в файле с помощью тега <object runat="server" scope="session">.
<object runat="server" scope="session"
id="SessionStr" class="System.Text.StringBuilder"/>
Отключение состояния сеанса
Если sessionState mode в файле Web.config значения Off:
<configuration>
<system.web>
<sessionState mode="off"/>
</system.web>
</configuration>
Для отключения EnableSessionState в False.
Для использования профилей сначала нужно включить профили, изменив файл конфигурации веб-приложения ASP.NET. В составе конфигурации указывается поставщик профилей — это базовый класс, отвечающий за низкоуровневые задачи хранения и извлечения данных профилей. Можно использовать поставщик профилей, входящий в состав платформы .NET Framework, который хранит данные профилей в SQL Server, или создать и использовать свой собственный поставщик профилей.
Функция профилей настраивается путем определения списка свойств, значения которых необходимо поддерживать. Например, может понадобиться хранить почтовый индекс пользователя, чтобы приложение могло предоставлять ему региональные сведения — например, прогноз погоды. В файле конфигурации для этого потребуется определить свойство профиля с именем PostalCode. Раздел profile файла конфигурации может выглядеть следующим образом:
<profile>
<properties>
<add name="PostalCode" />
</properties>
</profile>
При запуске приложения платформа ASP.NET создает класс ProfileCommon, который создается динамически путем наследования от класса ProfileBase. В динамическом классе ProfileCommon представлены свойства, созданные по определениям свойств профиля, указанным в конфигурации приложения. Экземпляр этого динамического класса ProfileCommon затем задается в качестве значения свойства Profile текущего контекста HttpContext и будет доступен на страницах приложения.
В приложении необходимо получить значение или значения, которые необходимо сохранить, и занести их в определенные ранее свойства. Например, начальная страница приложения может содержать текстовое поле, в котором пользователь указывает почтовый индекс. Когда пользователь вводит почтовый индекс, свойство Profile получает значение для текущего пользователя, как показано в следующем примере:
Profile.PostalCode = txtPostalCode.Text;
При задании значения для Profile.PostalCode значение автоматически сохраняется для текущего пользователя. Нет необходимости писать код для определения того, кем является текущий пользователь, или явно сохранять значение в базе данных — эти задачи выполняет функция профилей.
Если есть необходимость использовать значение, то его получение будет аналогично его установке. Например, следующий пример кода показывает, как вызвать воображаемую функцию с именем GetWeatherInfo, передавая ей почтовый индекс текущего пользователя, сохраненный в профиле:
weatherInfo = GetWeatherInfo( Profile.PostalCode );
Нет необходимости определять, кем является пользователь, или выполнять поиск в базе данных. Простое считывание значения свойства из профиля приводит к тому, что платформа ASP.NET выполняет необходимые действия для идентификации текущего пользователя и поиска значения в постоянном хранилище профилей
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.