HttpSessionState 類別

定義

提供工作階段狀態值以及工作階段層級設定和存留期 (Lifetime) 管理方法的存取權。

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 項目。 如需詳細資訊,請參閱 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 提供會話狀態管理,讓您能夠跨多個要求儲存與唯一瀏覽器會話相關聯的資訊。 您可以儲存索引鍵名稱或數值索引所參考的值集合。 您可以使用 HttpSessionState 類別存取會話值和功能,此類別可透過 Session 目前 HttpContext 的 屬性或 SessionPage 屬性來存取。

會話資料與使用唯一識別碼的特定瀏覽器會話相關聯。 根據預設,此識別碼會儲存在瀏覽器中的非過期會話 Cookie 中,但您也可以將屬性 trueUseUri 設定 cookieless 為或設定應用程式組態的sessionState元素,將會話識別碼儲存在 URL 中。 您可以有 ASP.NET 藉由指定 UseDeviceProfilecookieless 屬性值來判斷瀏覽器是否支援 Cookie。 您也可以有 ASP.NET 藉由指定 屬性的值 AutoDetectcookieless 來判斷是否為瀏覽器啟用 Cookie。 如果指定時支援 Cookie,或是在指定時 UseDeviceProfileAutoDetect 啟用,則會話識別碼會儲存在 Cookie 中,否則會話識別碼會儲存在 URL 中。

會話會在第一個要求期間啟動,只要瀏覽器在屬性傳遞中指定的 Timeout 分鐘數之前,瀏覽器就會保存會話值。 當新的會話開始時,就會引發會話 Start 事件。 您可以使用此事件在會話開始時執行任何其他工作,例如設定預設會話值。 當會話逾時、 Abandon 呼叫 方法,或關閉 ASP.NET 應用程式時,就會引發會話 End 事件。 您可以使用此事件來執行任何必要的清除。 End只有在會話狀態 mode 設定為 InProc 時,才會引發 事件。

為了改善效能,使用 Cookie 的會話不會配置會話儲存體,直到資料實際儲存在 物件中 Session 為止。 如需詳細資訊,請參閱 SessionID 屬性 (Property)。

會話狀態不會跨 ASP.NET 應用程式界限保存。 如果瀏覽器流覽至另一個應用程式,則新應用程式無法使用會話資訊。

會話值預設會儲存在網頁伺服器上的記憶體中。 您也可以將會話值儲存在SQL Server資料庫中、ASP.NET 狀態伺服器或自訂伺服器。 這可讓您在 ASP.NET 或 IIS 進程或 ASP.NET 應用程式重新開機的情況下保留會話值,並讓會話值可在 Web 服務器陣列中的所有伺服器上使用。 此行為是藉由將 mode 屬性設定為應用程式組態之 sessionState元素中的有效 SessionStateMode 值來設定。 如需詳細資訊,請參閱 會話狀態模式

會話狀態的替代方案包括應用程式狀態 (查看 Application 屬性) 和 ASP.NET 快取 (查看 System.Web.Caching 命名空間) ,其中儲存 ASP.NET 應用程式所有使用者都可以存取的變數;ASP.NET 設定檔 (查看 System.Web.Profile 命名空間) ,這會保存資料存放區中的使用者值,而不需使用逾時來過期;ASP.NET System.Web.UI.WebControls 、 會保存 ; 中的控制項值 ViewState ; Cookies ; QueryString 屬性, 和 HTML 表單上的欄位,這些表單是使用 集合從 HTTP POST 取得 Form 的。 如需會話狀態與其他狀態管理替代方案之間差異的詳細資訊,請參閱 ASP.NET 狀態管理建議

屬性

CodePage

取得或設定目前工作階段的字集識別項。

Contents

取得目前工作階段物件的參考。

CookieMode

取得值,指出是否針對無 Cookie 工作階段設定應用程式。

Count

取得工作階段狀態集合的項目數目。

IsCookieless

取得值,指出工作階段 ID 是否內嵌於 URL 或儲存於 HTTP Cookie。

IsNewSession

取得值,指出工作階段是否與目前要求一起建立。

IsReadOnly

取得值,指出工作階段是否為唯讀。

IsSynchronized

取得值,指出對工作階段狀態值之集合的存取是否為同步的 (安全執行緒,Thread-Safe)。

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)

從陣列中的指定索引開始,將工作階段狀態值集合複製到一維陣列。

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)

IEnumerable 轉換成 IQueryable

適用於

另請參閱