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
атрибуту true
значение или UseUri в элементе sessionState конфигурации приложения. Вы можете ASP.NET определить, поддерживаются ли файлы cookie браузером, указав значение UseDeviceProfile для атрибута cookieless
. Вы также можете ASP.NET определить, включены ли файлы cookie для браузера, указав значение AutoDetect для атрибута cookieless
. Если файлы cookie поддерживаются при UseDeviceProfile указании или включены при AutoDetect указании, идентификатор сеанса будет храниться в файле cookie; в противном случае идентификатор сеанса будет храниться в URL-адресе.
Сеансы запускаются во время первого запроса, и значения сеанса будут сохраняться до тех пор, пока браузер выполняет новый запрос до количества минут, указанного в свойстве Timeout pass. При запуске нового сеанса возникает событие сеанса 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 конфигурации приложения. Дополнительные сведения см. в разделе Режимы состояния сеанса.
Альтернативы состоянию сеанса включают состояние приложения (см. Application свойство) и кэш ASP.NET (см. System.Web.Caching пространство имен), в котором хранятся переменные, к которым могут обращаться все пользователи приложения ASP.NET; профиль ASP.NET (см. System.Web.Profile пространство имен), который сохраняет пользовательские значения в хранилище данных без истечения времени ожидания; ASP.NET System.Web.UI.WebControls, которые сохраняют управляющие значения в ViewState; Cookiesсвойство QueryString ; и поля в HTML-форме, доступные из HTTP POST
Form с помощью коллекции. Дополнительные сведения о различиях между состоянием сеанса и другими альтернативными вариантами управления состоянием см. в разделе рекомендации по управлению состоянием ASP.NET.
Свойства
CodePage |
Возвращает или задает идентификатор кодировки для текущего сеанса. |
Contents |
Получает ссылку на текущий объект состояния сеанса. |
CookieMode |
Получает значение, указывающее, настроено ли приложение для сеансов без поддержки файлов cookie. |
Count |
Получает число элементов в коллекции состояний сеанса. |
IsCookieless |
Возвращает значение, позволяющее определить, был ли идентификатор сеанса внедрен в URL-адрес или сохранен в HTTP-файле Cookie. |
IsNewSession |
Возвращает значение, позволяющее определить, был ли создан сеанс с текущим запросом. |
IsReadOnly |
Возвращает значение, позволяющее определить, доступен ли сеанс только для чтения. |
IsSynchronized |
Возвращает значение, позволяющее определить, синхронизирован ли доступ к коллекции значений состояния сеанса (потокобезопасный доступ). |
Item[Int32] |
Возвращает или задает значение сеанса по числовому индексу. |
Item[String] |
Возвращает или задает значение сеанса по имени. |
Keys |
Возвращает коллекцию ключей для всех значений, хранящихся в коллекции состояния сеанса. |
LCID |
Получает или задает код языка (LCID) текущего сеанса. |
Mode |
Возвращает текущий режим состояния сеанса. |
SessionID |
Возвращает уникальный идентификатор сеанса. |
StaticObjects |
Возвращает коллекцию объектов, объявленных в файле Global.asax приложения ASP.NET тегами |
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) |
Методы расширения
Cast<TResult>(IEnumerable) |
Приводит элементы объекта IEnumerable к заданному типу. |
OfType<TResult>(IEnumerable) |
Выполняет фильтрацию элементов объекта IEnumerable по заданному типу. |
AsParallel(IEnumerable) |
Позволяет осуществлять параллельный запрос. |
AsQueryable(IEnumerable) |
Преобразовывает коллекцию IEnumerable в объект IQueryable. |