Поделиться через


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>
            &nbsp;</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>
            &nbsp;</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>
            &nbsp;</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>
            &nbsp;</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 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

Возвращает коллекцию объектов, объявленных в файле Global.asax приложения ASP.NET тегами <object Runat="Server" Scope="Session"/>.

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.

Применяется к

См. также раздел