HttpSessionState クラス

セッション状態値、セッションレベルの設定および有効期間管理メソッドにアクセスできるようにします。

名前空間: System.Web.SessionState
アセンブリ: System.Web (system.web.dll 内)

構文

'宣言
Public NotInheritable Class HttpSessionState
    Implements ICollection, IEnumerable
'使用
Dim instance As HttpSessionState
public sealed class HttpSessionState : ICollection, IEnumerable
public ref class HttpSessionState sealed : ICollection, IEnumerable
public final class HttpSessionState implements ICollection, IEnumerable
public final class HttpSessionState implements ICollection, IEnumerable
適用できません。

解説

ASP.NET は、複数の要求に対して一意のブラウザ セッションに関連付けられた情報を格納するためのセッション状態管理機能を提供します。格納できるのは、キー名または数値インデックスによって参照する値のコレクションです。セッション値およびその機能には、現在の HttpContextSession プロパティまたは PageSession プロパティを使用してアクセス可能な HttpSessionState クラスを使用してアクセスします。

セッション データは、一意の識別子を使用して特定のブラウザ セッションに関連付けられます。既定では、この識別子はブラウザの無期限のセッション Cookie に格納されますが、cookieless 属性を true に設定するか、またはアプリケーション構成の sessionState 要素の UseUri を設定して、セッション識別子を URL に格納するようにアプリケーションを構成することもできます。cookieless 属性の UseDeviceProfile の値を指定すると、ASP.NET はブラウザが Cookie をサポートしているかどうかを確認できます。cookieless 属性の AutoDetect の値を指定すると、ASP.NET はブラウザで Cookie が有効になっているかどうかも確認できます。UseDeviceProfile を指定したときに Cookie がサポートされている場合、または AutoDetect を指定したときに Cookie が有効になっている場合はセッション識別子を Cookie に格納でき、それ以外の場合はセッション識別子を URL に格納します。

セッションは最初の要求で開始され、Timeout プロパティに指定された時間 (分) が経過するまでにブラウザが継続して新しい要求を実行する限り、セッション値は保持されます。新しいセッションが始まると、セッションの Start イベントが発生します。このイベントを使用すると、セッションの既定値の設定などのセッションの開始時の追加処理を実行できます。セッションの有効期限が切れると、Abandon メソッドが呼び出されて、ASP.NET アプリケーションがシャットダウンされ、セッションの End イベントが発生します。このイベントを使用すると、必要なクリーンアップを実行できます。End イベントは、セッション状態 modeInProc に設定されている場合のみ発生します。

パフォーマンス向上のため、Cookie を使用するセッションは、実際にデータが Session オブジェクト内に格納されるまでセッション ストレージを割り当てません。詳細については、SessionID プロパティのトピックを参照してください。

セッション状態が ASP.NET アプリケーションの境界を超えて保持されることはありません。ブラウザが別のアプリケーションに移動した場合、新しいアプリケーションが同じセッション情報を使用することはできません。

セッション値は、既定で Web サーバーのメモリに格納されます。SQL Server データベース、ASP.NET 状態サーバー、またはカスタム サーバーにセッション値を格納することもできます。これによって、ASP.NET、IIS プロセス、または ASP.NET アプリケーションが再起動した場合にもセッション値が保持され、Web ファームのすべてのサーバーでセッション値を使用できるようになります。この動作は、mode 属性をアプリケーション構成の sessionState 要素の有効な SessionStateMode 値に設定することにより構成されます。詳細については、「セッション状態モード」を参照してください。

セッション状態の代替手段としては、アプリケーション状態 (Application プロパティのトピックを参照) および ASP.NET アプリケーションのすべてのユーザーがアクセスできる変数を格納する ASP.NET キャッシュ (System.Web.Caching 名前空間のトピックを参照)、タイムアウトを使用して有効期限切れにすることなく、データ ストアにユーザー値を永続化する ASP.NET プロファイル (System.Web.Profile 名前空間のトピックを参照)、コントロール値を ViewState に保持する ASP.NET の System.Web.UI.WebControlsCookiesQueryString プロパティ、および Form コレクションを使用して HTTP POST から利用できる HTML フォームのフィールドがあります。セッション状態と他の状態管理の代替手段の違いの詳細については、「ASP.NET の状態管理に関する推奨事項」を参照してください。

トピック 場所
方法 : セッション状態から値を読み取る Visual Studio ASP .NET での Web アプリケーションの作成
方法 : セッション状態ストア プロバイダのサンプル Visual Studio ASP .NET での Web アプリケーションの作成
方法 : セッション状態の値を保存する Visual Studio ASP .NET での Web アプリケーションの作成
方法 : セッション状態から値を読み取る Visual Studio ASP .NET での Web アプリケーションの作成
方法 : セッション状態ストア プロバイダのサンプル Visual Studio ASP .NET での Web アプリケーションの作成
方法 : セッション状態の値を保存する Visual Studio ASP .NET での Web アプリケーションの作成
方法 : セッション状態から値を読み取る ASP .NET Web アプリケーションの作成
方法 : セッション状態ストア プロバイダのサンプル ASP .NET Web アプリケーションの作成
方法 : セッション状態の値を保存する ASP .NET Web アプリケーションの作成

使用例

セッション状態から値を設定および取得するコード例を次に示します。

セキュリティに関するメモセキュリティに関するメモ :

この例には、ユーザー入力を受け付けるテキスト ボックスがあります。これにより、セキュリティが脆弱になる可能性があります。既定では、ASP.NET Web ページによって、ユーザー入力にスクリプトまたは 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>
<%@ 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>

.NET Framework のセキュリティ

継承階層

System.Object
  System.Web.SessionState.HttpSessionState

スレッド セーフ

この型の public static (Visual Basicでは共有) メンバはすべて,スレッド セーフです。インスタンス メンバの場合は,スレッド セーフであるとは限りません。

プラットフォーム

Windows 98,Windows Server 2000 SP4,Windows CE,Windows Millennium Edition,Windows Mobile for Pocket PC,Windows Mobile for Smartphone,Windows Server 2003,Windows XP Media Center Edition,Windows XP Professional x64 Edition,Windows XP SP2,Windows XP Starter Edition

Microsoft .NET Framework 3.0 は Windows Vista,Microsoft Windows XP SP2,および Windows Server 2003 SP1 でサポートされています。

バージョン情報

.NET Framework

サポート対象 : 3.0,2.0,1.1,1.0

参照

関連項目

HttpSessionState メンバ
System.Web.SessionState 名前空間
System.Web.Profile
System.Web.Caching

その他の技術情報

セッション状態の概要
スクリプトによる攻略の概要