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 网页验证用户输入是否不包含脚本或 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 类访问会话值和功能,该类可通过 Session 当前 HttpContext的 属性或 SessionPage属性进行访问。

会话数据使用唯一标识符与特定浏览器会话相关联。 默认情况下,此标识符存储在浏览器中未过期的会话 Cookie 中,但也可以通过将属性设置为 cookielessUseUri应用程序配置的 sessionState 元素,将应用程序配置为true将会话标识符存储在 URL 中。 可以通过为 属性指定 值UseDeviceProfilecookieless来 ASP.NET 确定浏览器是否支持 Cookie。 还可以通过为 属性指定 值 AutoDetect 来 ASP.NET 确定是否为 cookieless 浏览器启用 Cookie。 如果在指定 时 UseDeviceProfile 支持 Cookie,或者在指定 时 AutoDetect 启用 Cookie,则会话标识符将存储在 Cookie 中;否则会话标识符将存储在 URL 中。

会话在第一次请求期间启动,只要浏览器在属性传递中指定的 Timeout 分钟数之前发出新请求,会话值就会保留。 新会话开始时,将引发会话 Start 事件。 可以使用此事件在会话开始时执行任何其他工作,例如设置默认会话值。 会话超时、 Abandon 调用 方法或关闭 ASP.NET 应用程序时,将引发会话 End 事件。 可以使用此事件执行任何必要的清理。 End仅当会话状态mode设置为 InProc时,才会引发 事件。

为了提高性能,在数据实际存储在 对象中 Session 之前,使用 Cookie 的会话不会分配会话存储。 有关更多信息,请参见 SessionID 属性。

会话状态不会跨 ASP.NET 应用程序边界保留。 如果浏览器导航到另一个应用程序,则会话信息对新应用程序不可用。

默认情况下,会话值存储在 Web 服务器上的内存中。 还可以将会话值存储在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保存在 HTML 窗体上的 ;Cookies; QueryString 属性和字段中,这些值可使用 Form 集合从 HTTP POST 获取。 有关会话状态与其他状态管理替代项之间的差异的更多详细信息,请参阅 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)

从数组中指定索引处开始,将会话状态值集合复制到一维数组。

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

适用于

另请参阅