HttpSessionState Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет доступ к значениям состояния сеанса, а также параметрам уровня сеанса и методам управления временем существования.
public ref class HttpSessionState sealed : System::Collections::ICollection
public sealed class HttpSessionState : System.Collections.ICollection
type HttpSessionState = class
interface ICollection
interface IEnumerable
Public NotInheritable Class HttpSessionState
Implements ICollection
- Наследование
-
HttpSessionState
- Реализации
Примеры
В следующем примере кода задаются и извлекаются значения из состояния сеанса.
Это важно
В этом примере есть текстовое поле, которое принимает входные данные пользователя, которое является потенциальной угрозой безопасности. По умолчанию ASP.NET веб-страницы проверяют, что входные данные пользователя не включают скрипт или ЭЛЕМЕНТЫ HTML. Дополнительные сведения см. в разделе "Обзор эксплойтов скриптов".
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Collections" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
public void Page_Load(object sender, EventArgs args)
{
if (!IsPostBack)
{
if (Session["address"] == null)
{
enterUserInfoPanel.Visible = true;
userInfoPanel.Visible = false;
}
else
{
enterUserInfoPanel.Visible = false;
userInfoPanel.Visible = true;
SetLabels();
}
}
}
protected void SetLabels()
{
firstNameLabel.Text = Session["firstName"].ToString();
lastNameLabel.Text = Session["lastName"].ToString();
addressLabel.Text = Session["address"].ToString();
cityLabel.Text = Session["city"].ToString();
stateOrProvinceLabel.Text = Session["stateOrProvince"].ToString();
zipCodeLabel.Text = Session["zipCode"].ToString();
countryLabel.Text = Session["country"].ToString();
}
protected void EnterInfoButton_OnClick(object sender, EventArgs e)
{
Session["firstName"] = Server.HtmlEncode(firstNameTextBox.Text);
Session["lastName"] = Server.HtmlEncode(lastNameTextBox.Text);
Session["address"] = Server.HtmlEncode(addressTextBox.Text);
Session["city"] = Server.HtmlEncode(cityTextBox.Text);
Session["stateOrProvince"] = Server.HtmlEncode(stateOrProvinceTextBox.Text);
Session["zipCode"] = Server.HtmlEncode(zipCodeTextBox.Text);
Session["country"] = Server.HtmlEncode(countryTextBox.Text);
enterUserInfoPanel.Visible = false;
userInfoPanel.Visible = true;
SetLabels();
}
protected void ChangeInfoButton_OnClick(object sender, EventArgs args)
{
enterUserInfoPanel.Visible = true;
userInfoPanel.Visible = true;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<meta http-equiv="Content-Type" content="text/html" />
<title>User Information</title>
</head>
<body>
<form id="form1" runat="server">
<h3>
User information</h3>
<asp:Label ID="Msg" ForeColor="maroon" runat="server" /><br />
<asp:Panel ID="enterUserInfoPanel" runat="server">
<table cellpadding="3" border="0">
<tr>
<td>
First name:</td>
<td>
<asp:TextBox ID="firstNameTextBox" runat="server" /></td>
</tr>
<tr>
<td>
Last name:</td>
<td>
<asp:TextBox ID="lastNameTextBox" runat="server" /></td>
</tr>
<tr>
<td>
Address:</td>
<td>
<asp:TextBox ID="addressTextBox" runat="server" /></td>
</tr>
<tr>
<td>
City:</td>
<td>
<asp:TextBox ID="cityTextBox" runat="server" /></td>
</tr>
<tr>
<td>
State or Province:</td>
<td>
<asp:TextBox ID="stateOrProvinceTextBox" runat="server" /></td>
</tr>
<tr>
<td>
Zip Code/Postal Code:</td>
<td>
<asp:TextBox ID="zipCodeTextBox" runat="server" /></td>
</tr>
<tr>
<td>
Country:</td>
<td>
<asp:TextBox ID="countryTextBox" runat="server" /></td>
</tr>
<tr>
<td>
</td>
<td>
<asp:Button ID="enterInfoButton" runat="server" Text="Enter user information" OnClick="EnterInfoButton_OnClick" /></td>
</tr>
</table>
</asp:Panel>
<asp:Panel ID="userInfoPanel" runat="server">
<table cellpadding="3" border="0">
<tr>
<td>
Name:</td>
<td>
<asp:Label ID="firstNameLabel" runat="server" />
<asp:Label ID="lastNameLabel" runat="server" />
</td>
</tr>
<tr>
<td valign="top">
address:</td>
<td>
<asp:Label ID="addressLabel" runat="server" /><br />
<asp:Label ID="cityLabel" runat="server" />,
<asp:Label ID="stateOrProvinceLabel" runat="server" />
<asp:Label ID="zipCodeLabel" runat="server" /><br />
<asp:Label ID="countryLabel" runat="server" />
</td>
</tr>
<tr>
<td>
</td>
<td>
<asp:Button ID="changeInfoButton" runat="server" Text="Change user information" OnClick="ChangeInfoButton_OnClick" /></td>
</tr>
</table>
</asp:Panel>
</form>
</body>
</html>
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Collections" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Public Sub Page_Load(ByVal sender As Object, ByVal args As EventArgs)
If Not IsPostBack Then
If Session("Address") Is Nothing Then
EnterUserInfoPanel.Visible = True
UserInfoPanel.Visible = False
Else
EnterUserInfoPanel.Visible = False
UserInfoPanel.Visible = True
SetLabels()
End If
End If
End Sub
Protected Sub SetLabels()
FirstNameLabel.Text = Session("FirstName").ToString()
LastNameLabel.Text = Session("LastName").ToString()
AddressLabel.Text = Session("Address").ToString()
CityLabel.Text = Session("City").ToString()
StateOrProvinceLabel.Text = Session("StateOrProvince").ToString()
ZipCodeLabel.Text = Session("ZipCode").ToString()
CountryLabel.Text = Session("Country").ToString()
End Sub
Protected Sub EnterInfoButton_OnClick(ByVal sender As Object, ByVal args As EventArgs)
Session("FirstName") = Server.HtmlEncode(FirstNameTextBox.Text)
Session("LastName") = Server.HtmlEncode(LastNameTextBox.Text)
Session("Address") = Server.HtmlEncode(AddressTextBox.Text)
Session("City") = Server.HtmlEncode(CityTextBox.Text)
Session("StateOrProvince") = Server.HtmlEncode(StateOrProvinceTextBox.Text)
Session("ZipCode") = Server.HtmlEncode(ZipCodeTextBox.Text)
Session("Country") = Server.HtmlEncode(CountryTextBox.Text)
EnterUserInfoPanel.Visible = False
UserInfoPanel.Visible = True
SetLabels()
End Sub
Protected Sub ChangeInfoButton_OnClick(ByVal sender As Object, ByVal args As EventArgs)
EnterUserInfoPanel.Visible = True
UserInfoPanel.Visible = False
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<meta http-equiv="Content-Type" content="text/html" />
<title>User Information</title>
</head>
<body>
<form id="form1" runat="server">
<h3>
User information</h3>
<asp:Label ID="Msg" ForeColor="maroon" runat="server" /><br />
<asp:Panel ID="EnterUserInfoPanel" runat="server">
<table cellpadding="3" border="0">
<tr>
<td>
First name:</td>
<td>
<asp:TextBox ID="FirstNameTextBox" runat="server" /></td>
</tr>
<tr>
<td>
Last name:</td>
<td>
<asp:TextBox ID="LastNameTextBox" runat="server" /></td>
</tr>
<tr>
<td>
Address:</td>
<td>
<asp:TextBox ID="AddressTextBox" runat="server" /></td>
</tr>
<tr>
<td>
City:</td>
<td>
<asp:TextBox ID="CityTextBox" runat="server" /></td>
</tr>
<tr>
<td>
State or Province:</td>
<td>
<asp:TextBox ID="StateOrProvinceTextBox" runat="server" /></td>
</tr>
<tr>
<td>
Zip Code/Postal Code:</td>
<td>
<asp:TextBox ID="ZipCodeTextBox" runat="server" /></td>
</tr>
<tr>
<td>
Country:</td>
<td>
<asp:TextBox ID="CountryTextBox" runat="server" /></td>
</tr>
<tr>
<td>
</td>
<td>
<asp:Button ID="EnterInfoButton" runat="server" Text="Enter user information" OnClick="EnterInfoButton_OnClick" /></td>
</tr>
</table>
</asp:Panel>
<asp:Panel ID="UserInfoPanel" runat="server">
<table cellpadding="3" border="0">
<tr>
<td>
Name:</td>
<td>
<asp:Label ID="FirstNameLabel" runat="server" />
<asp:Label ID="LastNameLabel" runat="server" />
</td>
</tr>
<tr>
<td valign="top">
Address:</td>
<td>
<asp:Label ID="AddressLabel" runat="server" /><br />
<asp:Label ID="CityLabel" runat="server" />,
<asp:Label ID="StateOrProvinceLabel" runat="server" />
<asp:Label ID="ZipCodeLabel" runat="server" /><br />
<asp:Label ID="CountryLabel" runat="server" />
</td>
</tr>
<tr>
<td>
</td>
<td>
<asp:Button ID="ChangeInfoButton" runat="server" Text="Change user information" OnClick="ChangeInfoButton_OnClick" /></td>
</tr>
</table>
</asp:Panel>
</form>
</body>
</html>
Комментарии
ASP.NET обеспечивает управление состоянием сеанса, чтобы позволить хранить сведения, связанные с уникальным сеансом браузера в нескольких запросах. Вы можете хранить коллекцию значений, на которые ссылается имя ключа или числовый индекс. Доступ к значениям и функциям сеанса доступен с помощью HttpSessionState класса, который доступен через Session свойство текущего HttpContextили Session свойства объекта Page.
Данные сеанса связаны с определенным сеансом браузера с помощью уникального идентификатора. По умолчанию этот идентификатор хранится в файле cookie сеанса без истечения срока действия в браузере, но вы также можете настроить приложение для хранения идентификатора сеанса в URL-адресе, задав cookieless атрибут или trueUseUri элемент sessionState конфигурации приложения. Вы можете ASP.NET определить, поддерживаются ли файлы cookie браузером, указав значение UseDeviceProfile атрибута cookieless . Кроме того, можно ASP.NET определить, включены ли файлы cookie для браузера, указав значение атрибута AutoDetectcookieless . Если файлы cookie поддерживаются при UseDeviceProfile указании или включено при AutoDetect указании, идентификатор сеанса будет храниться в файле cookie; в противном случае идентификатор сеанса будет храниться в URL-адресе.
Сеансы запускаются во время первого запроса и значения сеансов будут сохраняться до тех пор, пока новый запрос выполняется браузером до количества минут, указанных в Timeout передаче свойства. При запуске нового сеанса возникает событие сеанса Start . Это событие можно использовать для выполнения любой дополнительной работы в начале сеанса, например задания значений сеанса по умолчанию. При истечении Abandon времени ожидания сеанса вызывается метод или приложение ASP.NET завершает работу, вызывается событие сеанса End . Это событие можно использовать для выполнения любой необходимой очистки. Событие End возникает только в том случае, если для состояния mode сеанса задано InProcзначение .
Чтобы повысить производительность, сеансы, использующие файлы cookie, не выделяют хранилище сеансов, пока данные не хранятся в объекте Session . Дополнительные сведения см. в свойстве SessionID.
Состояние сеанса не сохраняется в ASP.NET границах приложения. Если браузер переходит к другому приложению, сведения о сеансе недоступны для нового приложения.
Значения сеансов хранятся в памяти на веб-сервере по умолчанию. Вы также можете хранить значения сеансов в базе данных SQL Server, сервере состояния ASP.NET или пользовательском сервере. Это позволяет сохранять значения сеансов в случаях, когда процесс ASP.NET или IIS или ASP.NET приложение перезапускается, а также сделать значения сеанса доступными на всех серверах в веб-ферме. Это поведение настраивается путем задания атрибута mode допустимому SessionStateMode значению в элементе sessionState конфигурации приложения. Дополнительные сведения см. в разделе Session-State Режимы.
В качестве альтернативы состоянию сеанса относятся состояние приложения (смApplication. свойство) и кэш ASP.NET (смSystem.Web.Caching. пространство имен), в котором хранятся переменные, к которым могут обращаться все пользователи приложения ASP.NET; профиль ASP.NET (смSystem.Web.Profile. пространство имен), который сохраняет значения пользователей в хранилище данных без истечения времени ожидания; ASP.NETSystem.Web.UI.WebControls, которые сохраняют значения элементов управления в QueryStringViewStateCookies; свойство; свойство и поля в HTML-форме, доступные из HTTP-формы.POSTForm с помощью коллекции. Дополнительные сведения о различиях между состоянием сеанса и другими альтернативами управления состоянием см. в ASP.NET рекомендациях по управлению состояниями.
Свойства
| Имя | Описание |
|---|---|
| CodePage |
Возвращает или задает идентификатор набора символов для текущего сеанса. |
| Contents |
Возвращает ссылку на текущий объект состояния сеанса. |
| CookieMode |
Возвращает значение, указывающее, настроено ли приложение для сеансов без файлов cookie. |
| Count |
Возвращает количество элементов в коллекции состояний сеанса. |
| IsCookieless |
Возвращает значение, указывающее, внедрен ли идентификатор сеанса в URL-адрес или хранится в HTTP-файле cookie. |
| IsNewSession |
Возвращает значение, указывающее, был ли создан сеанс с текущим запросом. |
| IsReadOnly |
Возвращает значение, указывающее, доступен ли сеанс только для чтения. |
| IsSynchronized |
Возвращает значение, указывающее, синхронизирован ли доступ к коллекции значений состояния сеанса (потокобезопасный). |
| Item[Int32] |
Возвращает или задает значение сеанса по числовой индексу. |
| Item[String] |
Возвращает или задает значение сеанса по имени. |
| Keys |
Возвращает коллекцию ключей для всех значений, хранящихся в коллекции состояний сеанса. |
| LCID |
Возвращает или задает идентификатор языкового стандарта (LCID) текущего сеанса. |
| Mode |
Возвращает текущий режим состояния сеанса. |
| SessionID |
Возвращает уникальный идентификатор сеанса. |
| StaticObjects |
Получает коллекцию объектов, объявленных тегами |
| SyncRoot |
Возвращает объект, который можно использовать для синхронизации доступа к коллекции значений состояния сеанса. |
| Timeout |
Возвращает или задает время в минутах, разрешенное между запросами, прежде чем поставщик состояний сеанса завершает сеанс. |
Методы
| Имя | Описание |
|---|---|
| Abandon() |
Отменяет текущий сеанс. |
| Add(String, Object) |
Добавляет новый элемент в коллекцию состояний сеанса. |
| Clear() |
Удаляет все ключи и значения из коллекции состояний сеанса. |
| CopyTo(Array, Int32) |
Копирует коллекцию значений состояния сеанса в одномерный массив, начиная с указанного индекса в массиве. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetEnumerator() |
Возвращает перечислитель, который можно использовать для чтения всех имен переменных состояния сеанса в текущем сеансе. |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| Remove(String) |
Удаляет элемент из коллекции состояний сеанса. |
| RemoveAll() |
Удаляет все ключи и значения из коллекции состояний сеанса. |
| RemoveAt(Int32) |
Удаляет элемент по указанному индексу из коллекции состояний сеанса. |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Методы расширения
| Имя | Описание |
|---|---|
| AsParallel(IEnumerable) |
Включает параллелизацию запроса. |
| AsQueryable(IEnumerable) |
Преобразует IEnumerable в IQueryable. |
| Cast<TResult>(IEnumerable) |
Приведение элементов IEnumerable к указанному типу. |
| OfType<TResult>(IEnumerable) |
Фильтрует элементы IEnumerable на основе указанного типа. |