次の方法で共有


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
実装

次のコード例では、セッション状態の値を設定および取得します。

Important

この例には、潜在的なセキュリティ上の脅威であるユーザー入力を受け入れるテキスト ボックスがあります。 既定では、ASP.NET Web ページでは、ユーザー入力にスクリプトや 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 では、セッション状態管理を使用して、一意のブラウザー セッションに関連付けられた情報を複数の要求にわたって格納できます。 キー名または数値インデックスによって参照される値のコレクションを格納できます。 セッションの値と機能へのアクセスは、現在のHttpContextSession プロパティまたはPageSession プロパティを介してアクセスできる HttpSessionState クラスを使用して使用できます。

セッション データは、一意の識別子を使用して特定のブラウザー セッションに関連付けられます。 既定では、この識別子は期限切れでないセッション Cookie にブラウザーに格納されますが、アプリケーション構成の sessionState 要素で cookieless 属性を true または UseUri に設定することで、セッション識別子を URL に格納するようにアプリケーションを構成することもできます。 cookieless属性 ASP.NETUseDeviceProfileの値を指定することで、ブラウザーで Cookie がサポートされているかどうかを判断できます。 cookieless属性にAutoDetectの値を指定して、ブラウザーで Cookie が有効になっているかどうかを ASP.NET に判断することもできます。 UseDeviceProfileの指定時に Cookie がサポートされている場合、またはAutoDetectが指定されたときに有効になっている場合、セッション識別子は 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値に設定することによって構成されます。 詳細については、「 Session-State モード」を参照してください。

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

プロパティ

名前 説明
CodePage

現在のセッションの文字セット識別子を取得または設定します。

Contents

現在のセッション状態オブジェクトへの参照を取得します。

CookieMode

アプリケーションが Cookie レス セッション用に構成されているかどうかを示す値を取得します。

Count

セッション状態コレクション内の項目の数を取得します。

IsCookieless

セッション ID が URL に埋め込まれているか、HTTP Cookie に格納されているかを示す値を取得します。

IsNewSession

セッションが現在の要求で作成されたかどうかを示す値を取得します。

IsReadOnly

セッションが読み取り専用かどうかを示す値を取得します。

IsSynchronized

セッション状態の値のコレクションへのアクセスが同期されているかどうかを示す値を取得します (スレッド セーフ)。

Item[Int32]

数値インデックスによるセッション値を取得または設定します。

Item[String]

セッション値を名前で取得または設定します。

Keys

セッション状態コレクションに格納されているすべての値のキーのコレクションを取得します。

LCID

現在のセッションのロケール識別子 (LCID) を取得または設定します。

Mode

現在のセッション状態モードを取得します。

SessionID

セッションの一意識別子を取得します。

StaticObjects

ASP.NET アプリケーション ファイル Global.asax 内の <object Runat="Server" Scope="Session"/> タグによって宣言されたオブジェクトのコレクションを取得します。

SyncRoot

セッション状態値のコレクションへのアクセスを同期するために使用できるオブジェクトを取得します。

Timeout

セッション状態プロバイダーがセッションを終了するまでの要求の間隔を分単位で取得または設定します。

メソッド

名前 説明
Abandon()

現在のセッションを取り消します。

Add(String, Object)

セッション状態コレクションに新しい項目を追加します。

Clear()

セッション状態コレクションからすべてのキーと値を削除します。

CopyTo(Array, Int32)

セッション状態の値のコレクションを、配列内の指定したインデックスから始まる 1 次元配列にコピーします。

Equals(Object)

指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetEnumerator()

現在のセッションのすべてのセッション状態変数名を読み取るために使用できる列挙子を返します。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Objectの簡易コピーを作成します。

(継承元 Object)
Remove(String)

セッション状態コレクションから項目を削除します。

RemoveAll()

セッション状態コレクションからすべてのキーと値を削除します。

RemoveAt(Int32)

指定したインデックス位置にある項目をセッション状態コレクションから削除します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

拡張メソッド

名前 説明
AsParallel(IEnumerable)

クエリの並列化を有効にします。

AsQueryable(IEnumerable)

IEnumerableIQueryableに変換します。

Cast<TResult>(IEnumerable)

IEnumerable の要素を指定した型にキャストします。

OfType<TResult>(IEnumerable)

指定した型に基づいて、IEnumerable の要素をフィルター処理します。

適用対象

こちらもご覧ください