Sdílet prostřednictvím


HttpSessionState Třída

Definice

Poskytuje přístup k hodnotám stavu relace, nastavení na úrovni relace a metody správy životnosti.

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
Dědičnost
HttpSessionState
Implementuje

Příklady

Následující příklad kódu nastaví a načte hodnoty ze stavu relace.

Důležité

Tento příklad obsahuje textové pole, které přijímá vstup uživatele, což je potenciální bezpečnostní hrozba. Ve výchozím nastavení ASP.NET webové stránky ověřte, že uživatelský vstup neobsahuje skript nebo elementy HTML. Další informace najdete v tématu Přehled zneužití skriptů.

<%@ 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>

Poznámky

ASP.NET poskytuje správu stavu relací, která umožňuje ukládat informace spojené s jedinečnou relací prohlížeče napříč několika požadavky. Můžete uložit kolekci hodnot, na které odkazuje název klíče nebo číselný index. Přístup k hodnotám a funkcím relací je k dispozici pomocí HttpSessionState třídy , která je přístupná prostřednictvím Session vlastnosti aktuálního HttpContextobjektu nebo Session vlastnosti Page.

Data relace jsou přidružená ke konkrétní relaci prohlížeče pomocí jedinečného identifikátoru. Ve výchozím nastavení je tento identifikátor uložen v souboru cookie relace bez vypršení platnosti v prohlížeči, ale můžete také nakonfigurovat aplikaci tak, aby identifikátor relace ukládal v adrese URL nastavením cookieless atributu na true nebo UseUri v elementu sessionState v konfiguraci aplikace. Zadáním hodnoty UseDeviceProfile atributu můžete ASP.NET určit, zda jsou soubory cookie podporovány prohlížečem cookieless . Zadáním hodnoty AutoDetectcookieless atributu můžete také ASP.NET určit, jestli jsou pro prohlížeč povoleny soubory cookie. Pokud jsou soubory cookie podporovány, když UseDeviceProfile jsou zadány nebo povoleny, když AutoDetect jsou zadány, pak se identifikátor relace uloží do souboru cookie, jinak se identifikátor relace uloží do adresy URL.

Relace se spustí během prvního požadavku a hodnoty relace se zachovají, dokud prohlížeč odešle nový požadavek před uplynutím počtu minut zadaných v průchodu Timeout vlastnosti. Při zahájení nové relace je vyvolána událost relace Start . Tuto událost můžete použít k provedení jakékoli další práce na začátku relace, například k nastavení výchozích hodnot relace. Při vypršení časového limitu Abandon relace je volána metoda nebo je aplikace ASP.NET vypnuta, je vyvolána událost relace End . Tuto událost můžete použít k provedení nezbytného vyčištění. Událost End je vyvolána pouze v případě, že je stav mode relace nastavený na InProchodnotu .

Pro zvýšení výkonu relace, které používají soubory cookie, nepřidělují úložiště relací, dokud nejsou data skutečně uložena v objektu Session . Další informace najdete ve SessionID vlastnosti .

Stav relace se nezachovává přes hranice ASP.NET aplikace. Pokud prohlížeč přejde do jiné aplikace, informace o relaci nebudou pro novou aplikaci k dispozici.

Hodnoty relací jsou ve výchozím nastavení uloženy v paměti na webovém serveru. Hodnoty relací můžete také uložit do databáze SQL Serveru, ASP.NET stavového serveru nebo vlastního serveru. To umožňuje zachovat hodnoty relací v případech, kdy se restartuje proces ASP.NET, iis nebo ASP.NET aplikace, a zpřístupnit hodnoty relací na všech serverech ve webové farmě. Toto chování se konfiguruje nastavením atributu mode na platnou SessionStateMode hodnotu v elementu sessionState vaší konfigurace aplikace. Další informace najdete v tématu Režimy stavu relace.

Mezi alternativy ke stavu relace patří stav aplikace (viz Application vlastnost) a mezipaměť ASP.NET (viz System.Web.Caching obor názvů), do které se ukládají proměnné, ke kterým mají přístup všichni uživatelé aplikace ASP.NET; profil ASP.NET (viz System.Web.Profile obor názvů), který uchovává hodnoty uživatelů v úložišti dat bez vypršení jejich platnosti pomocí časového limitu; ASP.NET System.Web.UI.WebControls, které uchovávají hodnoty ovládacích prvků v ViewState; ; CookiesQueryString vlastnosti ; a pole ve formuláři HTML, která jsou k dispozici z http POSTForm pomocí kolekce. Další podrobnosti o rozdílech mezi stavem relace a dalšími alternativami správy stavu najdete v tématu doporučení ke správě stavu ASP.NET.

Vlastnosti

CodePage

Získá nebo nastaví identifikátor znakové sady pro aktuální relaci.

Contents

Získá odkaz na aktuální objekt stavu relace.

CookieMode

Získá hodnotu, která označuje, zda je aplikace nakonfigurována pro relace bez souborů cookie.

Count

Získá počet položek v kolekci stavu relace.

IsCookieless

Získá hodnotu označující, zda ID relace je vložena v adrese URL nebo uložena v souboru cookie HTTP.

IsNewSession

Získá hodnotu označující, zda byla vytvořena relace s aktuálním požadavkem.

IsReadOnly

Získá hodnotu označující, zda je relace jen pro čtení.

IsSynchronized

Získá hodnotu označující, zda přístup ke kolekci hodnot stavu relace je synchronizován (bezpečné z více vláken).

Item[Int32]

Získá nebo nastaví hodnotu relace podle číselného indexu.

Item[String]

Získá nebo nastaví hodnotu relace podle názvu.

Keys

Získá kolekci klíčů pro všechny hodnoty uložené v kolekci stavu relace.

LCID

Získá nebo nastaví identifikátor národního prostředí (LCID) aktuální relace.

Mode

Získá aktuální režim stavu relace.

SessionID

Získá jedinečný identifikátor relace.

StaticObjects

Získá kolekci objektů deklarovaných <object Runat="Server" Scope="Session"/> pomocí značek v rámci ASP.NET souboru aplikace Global.asax.

SyncRoot

Získá objekt, který lze použít k synchronizaci přístupu ke kolekci hodnot stavu relace.

Timeout

Získá nebo nastaví dobu v minutách mezi požadavky, než zprostředkovatel stavu relace ukončí relaci.

Metody

Abandon()

Zruší aktuální relaci.

Add(String, Object)

Přidá novou položku do kolekce stavu relace.

Clear()

Odebere všechny klíče a hodnoty z kolekce stavu relace.

CopyTo(Array, Int32)

Zkopíruje kolekci hodnot stavu relace do jednorozměrného pole počínaje zadaným indexem v poli.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetEnumerator()

Vrátí enumerátor, který lze použít ke čtení všech názvů proměnných stavu relace v aktuální relaci.

GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Type Získá z aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
Remove(String)

Odstraní položku z kolekce stavu relace.

RemoveAll()

Odebere všechny klíče a hodnoty z kolekce stavu relace.

RemoveAt(Int32)

Odstraní položku v zadaném indexu z kolekce stavu relace.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Metody rozšíření

Cast<TResult>(IEnumerable)

Přetypuje prvky objektu na IEnumerable zadaný typ.

OfType<TResult>(IEnumerable)

Filtruje prvky objektu IEnumerable na základě zadaného typu.

AsParallel(IEnumerable)

Umožňuje paralelizaci dotazu.

AsQueryable(IEnumerable)

Převede objekt na IEnumerableIQueryable.

Platí pro

Viz také