HttpSessionState Класс

Определение

Предоставляет доступ к значениям состояния сеанса, а также к параметрам уровня сеанса и методам управления длительностью сеанса.Provides access to session-state values as well as session-level settings and lifetime management methods.

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
Реализации

Примеры

В следующем примере кода задаются и извлекаются значения из состояния сеанса.The following code example sets and retrieves values from session state.

Важно!

В этом примере имеется текстовое поле, принимающее вводимые пользователем данные, что является потенциальной угрозой безопасности.This example has a text box that accepts user input, which is a potential security threat. По умолчанию данные, вводимые пользователем на веб-страницах ASP.NET, проверяются на наличие скриптов и HTML-элементов.By default, ASP.NET Web pages validate that user input does not include script or HTML elements. Дополнительные сведения см. в разделе Общие сведения об использовании сценариев.For more information, see Script Exploits Overview.

<%@ 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 обеспечивает управление состоянием сеанса, позволяя хранить информацию, связанную с уникальным сеансом браузера, между несколькими запросами.ASP.NET provides session-state management to enable you to store information associated with a unique browser session across multiple requests. Можно сохранить коллекцию значений, на которые ссылается имя ключа или числовой индекс.You can store a collection of values referenced by a key name or by numerical index. Доступ к значениям и функциональным возможностям сеанса можно получить HttpSessionState с помощью класса, доступного Session через свойство текущего HttpContextобъекта или Session свойства Page.Access to session values and functionality is available using the HttpSessionState class, which is accessible through the Session property of the current HttpContext, or the Session property of the Page.

Данные сеанса связаны с конкретным сеансом браузера с помощью уникального идентификатора.Session data is associated with a specific browser session using a unique identifier. По умолчанию этот идентификатор хранится в файле cookie сеанса с неистекшим сроком действия в браузере, но можно также настроить приложение для хранения идентификатора сеанса в URL-адресе, задав cookieless для true атрибута значение или UseUri в поле Элемент sessionState конфигурации приложения.By default, this identifier is stored in a non-expiring session cookie in the browser, but you can also configure your application to store the session identifier in the URL by setting the cookieless attribute to true or UseUri in the sessionState element of your application configuration. С помощью ASP.NET можно определить, поддерживаются ли в браузере файлы cookie, указав значение UseDeviceProfile cookieless для атрибута.You can have ASP.NET determine whether cookies are supported by the browser by specifying a value of UseDeviceProfile for the cookieless attribute. Кроме того, можно определить, включены ли файлы cookie для браузера с помощью ASP.NET, указав значение AutoDetect cookieless для атрибута.You can also have ASP.NET determine whether cookies are enabled for the browser by specifying a value of AutoDetect for the cookieless attribute. Если файлы cookie поддерживаются UseDeviceProfile при указании или включены при AutoDetect указании, идентификатор сеанса будет храниться в файле cookie; в противном случае идентификатор сеанса будет храниться в URL-адресе.If cookies are supported when UseDeviceProfile is specified, or enabled when AutoDetect is specified, then the session identifier will be stored in a cookie; otherwise the session identifier will be stored in the URL.

Сеансы запускаются во время первого запроса, и значения сеанса сохраняются до тех пор, пока новый запрос выполняется браузером до количества минут, указанного в Timeout проходе свойства.Sessions are started during the first request and session values will persist as long as a new request is made by the browser before the number of minutes specified in the Timeout property pass. При начале нового сеанса возникает событие Session Start .When a new session begins, the session Start event is raised. Это событие можно использовать для выполнения любой дополнительной работы в начале сеанса, например для задания значений сеанса по умолчанию.You can use this event to perform any additional work at the start of a session, such as setting default session values. Когда время ожидания сеанса истекло, Abandon вызывается метод или приложение ASP.NET завершает работу, вызывается событие Session End .When a session times out, the Abandon method is called, or the ASP.NET application is shut down, the session End event is raised. Это событие можно использовать для выполнения необходимой очистки.You can use this event to perform any necessary cleanup. Событие возникает только в том случае, если для mode InProcсостояния сеанса задано значение. EndThe End event is raised only when the session state mode is set to InProc.

Для повышения производительности сеансы, использующие файлы cookie, не распределяют хранилище сеансов, пока данные не будут сохранены Session в объекте.To improve performance, sessions that use cookies do not allocate session storage until data is actually stored in the Session object. Дополнительные сведения см. в описании свойства SessionID.For more information, see the SessionID property.

Состояние сеанса не сохраняется в границах приложения ASP.NET.Session state does not persist across ASP.NET application boundaries. Если браузер переходит к другому приложению, сведения о сеансе не доступны для нового приложения.If a browser navigates to another application, the session information is not available to the new application.

Значения сеанса по умолчанию хранятся в памяти на веб-сервере.Session values are stored in memory on the Web server, by default. Значения сеанса также можно хранить в SQL Server базе данных, сервере состояний ASP.NET или на настраиваемом сервере.You can also store session values in a SQL Server database, an ASP.NET state server, or a custom server. Это позволяет сохранять значения сеанса в случаях, когда перезапускаются процессы ASP.NET или IIS или ASP.NET, а также для обеспечения доступности значений сеанса на всех серверах в веб-ферме.This enables you to preserve session values in cases where the ASP.NET or IIS process or the ASP.NET application restarts and to make session values available across all the servers in a Web farm. Это поведение настраивается путем присвоения mode атрибуту допустимого SessionStateMode значения в элементе sessionState конфигурации приложения.This behavior is configured by setting the mode attribute to a valid SessionStateMode value in the sessionState element of your application configuration. Дополнительные сведения см. в разделе режимы состояния сеанса.For more information, see Session-State Modes.

Альтернативы состоянию сеанса включают состояние приложения (см Application . свойство) и кэш ASP.NET ( System.Web.Caching см. пространство имен), в котором хранятся переменные, доступные для всех пользователей приложения ASP.NET; профиль ASP.NET (см. System.Web.Profile пространство имен), сохраняющее значения пользователей в хранилище данных без истечения времени ожидания; ASP.NET System.Web.UI.WebControls, сохраняющая значения элементов управления ViewStateв; ; свойство, и поля в HTML-форме, доступные Form из HTTP POST с помощью коллекции. QueryString CookiesAlternatives to session state include application state (see the Application property) and the ASP.NET cache (see the System.Web.Caching namespace), which store variables that can be accessed by all users of an ASP.NET application; the ASP.NET profile (see the System.Web.Profile namespace), which persists user values in a data store without expiring them using a time-out; ASP.NET System.Web.UI.WebControls, which persist control values in the ViewState; Cookies; the QueryString property; and fields on an HTML form that are available from an HTTP POST using the Form collection. Дополнительные сведения о различиях между состоянием сеанса и другими альтернативами управления состоянием см. в разделе рекомендации по управлению состоянием ASP.NET.For more details on the differences between session state and other state-management alternatives, see ASP.NET State Management Recommendations.

Свойства

CodePage

Возвращает или задает идентификатор кодировки для текущего сеанса.Gets or sets the character-set identifier for the current session.

Contents

Получает ссылку на текущий объект состояния сеанса.Gets a reference to the current session-state object.

CookieMode

Возвращает значение, позволяющее определить, настроено ли приложение для сеансов без поддержки файлов Cookie.Gets a value that indicates whether the application is configured for cookieless sessions.

Count

Получает число элементов в коллекции состояний сеанса.Gets the number of items in the session-state collection.

IsCookieless

Возвращает значение, позволяющее определить, был ли идентификатор сеанса внедрен в URL-адрес или сохранен в HTTP-файле Cookie.Gets a value indicating whether the session ID is embedded in the URL or stored in an HTTP cookie.

IsNewSession

Возвращает значение, позволяющее определить, был ли создан сеанс с текущим запросом.Gets a value indicating whether the session was created with the current request.

IsReadOnly

Возвращает значение, позволяющее определить, доступен ли сеанс только для чтения.Gets a value indicating whether the session is read-only.

IsSynchronized

Возвращает значение, позволяющее определить, синхронизирован ли доступ к коллекции значений состояния сеанса (потокобезопасный доступ).Gets a value indicating whether access to the collection of session-state values is synchronized (thread safe).

Item[Int32]

Возвращает или задает значение сеанса по числовому индексу.Gets or sets a session value by numerical index.

Item[String]

Возвращает или задает значение сеанса по имени.Gets or sets a session value by name.

Keys

Возвращает коллекцию ключей для всех значений, хранящихся в коллекции состояния сеанса.Gets a collection of the keys for all values stored in the session-state collection.

LCID

Возвращает или задает код языка текущего сеанса.Gets or sets the locale identifier (LCID) of the current session.

Mode

Возвращает текущий режим состояния сеанса.Gets the current session-state mode.

SessionID

Возвращает для сеанса уникальный идентификатор.Gets the unique identifier for the session.

StaticObjects

Возвращает коллекцию объектов, объявленных в файле Global.asax приложения ASP.NET тегами <object Runat="Server" Scope="Session"/>.Gets a collection of objects declared by <object Runat="Server" Scope="Session"/> tags within the ASP.NET application file Global.asax.

SyncRoot

Возвращает объект, который можно использовать для синхронизации доступа к коллекции значений состояния сеанса.Gets an object that can be used to synchronize access to the collection of session-state values.

Timeout

Получает или задает количество времени (в минутах), которое проходит между запросами, прежде чем поставщик состояния сеанса завершает сеанс.Gets or sets the amount of time, in minutes, allowed between requests before the session-state provider terminates the session.

Методы

Abandon()

Отменяет текущий сеанс.Cancels the current session.

Add(String, Object)

Добавляет новый элемент в коллекцию состояния сеанса.Adds a new item to the session-state collection.

Clear()

Удаляет из коллекции состояния сеанса все ключи и значения.Removes all keys and values from the session-state collection.

CopyTo(Array, Int32)

Копирует коллекцию значений состояния сеанса в одномерный массив, начиная с заданного индекса массива.Copies the collection of session-state values to a one-dimensional array, starting at the specified index in the array.

Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
GetEnumerator()

Возвращает перечислитель, который можно использовать для считывания всех имен переменных состояния сеанса в текущем сеансе.Returns an enumerator that can be used to read all the session-state variable names in the current session.

GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
Remove(String)

Удаляет элемент из коллекции состояния сеанса.Deletes an item from the session-state collection.

RemoveAll()

Удаляет из коллекции состояния сеанса все ключи и значения.Removes all keys and values from the session-state collection.

RemoveAt(Int32)

Удаляет элемент по заданному индексу из коллекции состояния сеанса.Deletes an item at a specified index from the session-state collection.

ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Унаследовано от Object)

Методы расширения

Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.Enables parallelization of a query.

AsQueryable(IEnumerable)

Преобразовывает коллекцию IEnumerable в объект IQueryable.Converts an IEnumerable to an IQueryable.

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

Дополнительно