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


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 атрибут или 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

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

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 на основе указанного типа.

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

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