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 Web ページによって、ユーザー入力にスクリプトまたは 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 クラスを使用して利用できます。このクラスには、現在の HttpContextSession プロパティまたは PageSession プロパティを使用してアクセスできます。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 に格納されますが、cookieless 属性をアプリケーション構成のsessionState要素で true または UseUri するように、URL にセッション識別子を格納するようにアプリケーションを構成することもできます。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 を使用して、cookieless 属性の値 UseDeviceProfile を指定することにより、ブラウザーで cookie がサポートされているかどうかを判断できます。You can have ASP.NET determine whether cookies are supported by the browser by specifying a value of UseDeviceProfile for the cookieless attribute. また、ASP.NET を使用して、cookieless 属性に AutoDetect の値を指定することにより、ブラウザーで cookie が有効になっているかどうかを判断することもできます。You can also have ASP.NET determine whether cookies are enabled for the browser by specifying a value of AutoDetect for the cookieless attribute. UseDeviceProfile が指定されているときに cookie がサポートされている場合、または 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. 新しいセッションが開始されると、セッション 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 アプリケーションがシャットダウンされると、セッション 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. End イベントは、セッション状態 modeInProcに設定されている場合にのみ発生します。The 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.

既定では、セッション値は Web サーバー上のメモリに格納されます。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 アプリケーションを再起動し、Web ファーム内のすべてのサーバーでセッション値を使用できるようにする場合に、セッション値を保持できます。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. この動作を構成するには、アプリケーション構成のsessionState要素の有効な SessionStateMode 値に mode 属性を設定します。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 cache (System.Web.Caching 名前空間を参照) があります。このキャッシュには、ASP.NET アプリケーションのすべてのユーザーがアクセスできる変数が格納されています。ASP.NET プロファイル (System.Web.Profile 名前空間を参照)。タイムアウトを使用してデータストアにユーザーの値を保持します。ASP.NET System.Web.UI.WebControlsViewStateに制御値を保持します。Cookies;QueryString プロパティです。HTTP POST から使用できる HTML 形式のフィールドと、Form コレクションを使用するフィールド。Alternatives 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 State management の推奨事項」を参照してください。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

セッション ID を URL に埋め込むか、HTTP クッキーに格納するかを示す値を取得します。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

現在のセッションのロケール識別子 (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

ASP.NET アプリケーションの Global.asax ファイルの <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)

セッション状態の値のコレクションを 1 次元配列にコピーします。コピー操作は、指定した配列内のインデックスから始まります。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)

IEnumerableIQueryable に変換します。Converts an IEnumerable to an IQueryable.

適用対象

こちらもご覧ください