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 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 では、セッション状態管理を使用して、複数の要求にわたって一意のブラウザー セッションに関連付けられている情報を格納できます。 キー名または数値インデックスによって参照される値のコレクションを格納できます。 セッション値と機能へのアクセスは、 クラスをHttpSessionState使用して使用できます。このクラスには、現在HttpContextの の プロパティまたは の プロパティPageSession使用してSessionアクセスできます。

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

セッションは最初の要求中に開始され、セッション値は、プロパティ パスで Timeout 指定された分数の前にブラウザーによって新しい要求が行われる限り保持されます。 新しいセッションが開始されると、セッション Start イベントが発生します。 このイベントを使用すると、既定のセッション値の設定など、セッションの開始時に追加の作業を実行できます。 セッションがタイムアウトするか、 メソッドが Abandon 呼び出されるか、ASP.NET アプリケーションがシャットダウンされると、セッション End イベントが発生します。 このイベントを使用して、必要なクリーンアップを実行できます。 イベントは End 、セッション状態 mode が に設定されている場合にのみ発生します InProc

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

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

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

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

プロパティ

CodePage

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

Contents

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

CookieMode

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

Count

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

IsCookieless

セッション ID を URL に埋め込むか、HTTP クッキーに格納するかを示す値を取得します。

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)

拡張メソッド

Cast<TResult>(IEnumerable)

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

OfType<TResult>(IEnumerable)

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

AsParallel(IEnumerable)

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

AsQueryable(IEnumerable)

IEnumerableIQueryable に変換します。

適用対象

こちらもご覧ください