共用方式為


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 中,但您也可以將屬性true設定cookieless為或UseUri設定在應用程式組態的 sessionState 元素中,將應用程式設定為將會話標識符儲存在 URL 中。 您可以指定 屬性值,讓瀏覽器 ASP.NET 判斷瀏覽器UseDeviceProfilecookieless是否支援 Cookie。 您也可以 ASP.NET 指定 屬性的 值AutoDetectcookieless,以判斷是否為瀏覽器啟用 Cookie。 如果指定時支援 Cookie,或是在指定時UseDeviceProfileAutoDetect啟用,則會話標識碼會儲存在 Cookie 中,否則會話標識符會儲存在 URL 中。

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

為了改善效能,除非數據實際儲存在 物件中 Session ,否則使用Cookie的會話不會配置會話記憶體。 如需詳細資訊,請參閱 SessionID 屬性 (Property)。

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

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

會話狀態的替代方案包括應用程式狀態 (查看Application屬性) ,而 ASP.NET 快取 (查看System.Web.Caching命名空間) ,該命名空間) 可供 ASP.NET 應用程式的所有使用者存取;ASP.NET 配置檔 (查看System.Web.Profile命名空間) ,這會在數據存放區中保存使用者值而不使用逾時來過期;ASP.NET System.Web.UI.WebControls、 會保存 ; 中的ViewState控制項值;CookiesQueryString; 屬性,以及 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

適用於

另請參閱