HttpSessionState Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Hozzáférést biztosít a munkamenet-állapot értékeihez, valamint a munkamenetszintű beállításokhoz és az élettartam-kezelési módszerekhez.
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
- Öröklődés
-
HttpSessionState
- Megvalósítás
Példák
Az alábbi példakód beállítja és lekéri az értékeket a munkamenet állapotából.
Important
Ebben a példában egy szövegdoboz található, amely elfogadja a felhasználói bemenetet, ami potenciális biztonsági fenyegetés. Alapértelmezés szerint ASP.NET weblapok ellenőrzik, hogy a felhasználói bevitel nem tartalmaz-e szkript- vagy HTML-elemeket. További információ: Szkript kihasználása – áttekintés.
<%@ 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>
</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>
</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>
</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>
</td>
<td>
<asp:Button ID="ChangeInfoButton" runat="server" Text="Change user information" OnClick="ChangeInfoButton_OnClick" /></td>
</tr>
</table>
</asp:Panel>
</form>
</body>
</html>
Megjegyzések
ASP.NET munkamenet-állapotkezelést biztosít, amely lehetővé teszi az egyedi böngésző munkamenethez társított információk tárolását több kérés között. Kulcsnév vagy numerikus index alapján hivatkozott értékek gyűjteményét tárolhatja. A munkamenet-értékekhez és a funkciókhoz való hozzáférés az HttpSessionState osztály használatával érhető el, amely az Session aktuális vagy az HttpContext adott Sessiontulajdonság tulajdonságán Pagekeresztül érhető el.
A munkamenet-adatok egy adott böngésző munkamenethez lesznek társítva egy egyedi azonosító használatával. Alapértelmezés szerint ez az azonosító egy nem lejáró munkamenet-cookie-ban van tárolva a böngészőben, de úgy is konfigurálhatja az alkalmazást, hogy a munkamenet-azonosítót az URL-címben tárolja az alkalmazáskonfiguráció cookieless elemének beállításával trueUseUri. ASP.NET meghatározhatja, hogy a böngésző támogatja-e a cookie-kat a UseDeviceProfile attribútum cookieless értékének megadásával. A AutoDetect attribútum cookieless értékének megadásával ASP.NET is meghatározhatja, hogy a cookie-k engedélyezve vannak-e a böngészőben. Ha a cookie-k megadásakor UseDeviceProfile támogatottak, vagy AutoDetect ha meg van adva, akkor a munkamenet-azonosító egy cookie-ban lesz tárolva, ellenkező esetben a munkamenet-azonosító az URL-címben lesz tárolva.
A munkamenetek az első kérés során indulnak el, és a munkamenetek értékei mindaddig megmaradnak, amíg a böngésző új kérést küld a Timeout tulajdonságbérletben megadott percek száma előtt. Amikor új munkamenet kezdődik, a munkamenet Start eseménye létrejön. Ezzel az eseménysel bármilyen további munkát elvégezhet a munkamenet elején, például beállíthatja az alapértelmezett munkamenet-értékeket. Amikor egy munkamenet túllépi az időkorlátot, a rendszer meghívja a Abandon metódust, vagy a ASP.NET alkalmazás leáll, a munkamenet End esemény létrejön. Az esemény használatával elvégezheti a szükséges törlést. Az End esemény csak akkor jön létre, ha a munkamenet állapota mode be van állítva InProc.
A teljesítmény javítása érdekében a cookie-kat használó munkamenetek nem foglalnak le munkamenet-tárolót, amíg az adatok ténylegesen nem tárolódnak az Session objektumban. További információért lásd a SessionID tulajdonságot.
A munkamenet állapota nem marad fenn ASP.NET alkalmazáshatárokon. Ha egy böngésző egy másik alkalmazáshoz navigál, a munkamenet adatai nem érhetők el az új alkalmazás számára.
A munkamenet-értékek alapértelmezés szerint a webkiszolgáló memóriájában vannak tárolva. A munkamenet-értékeket SQL Server adatbázisban, ASP.NET állapotkiszolgálón vagy egyéni kiszolgálón is tárolhatja. Ez lehetővé teszi a munkamenet-értékek megőrzését olyan esetekben, amikor a ASP.NET vagy az IIS-folyamat vagy az ASP.NET alkalmazás újraindul, és a munkamenet-értékeket elérhetővé teszi a webfarm összes kiszolgálóján. Ezt a viselkedést úgy konfigurálja, hogy az mode attribútumot érvényes SessionStateMode értékre állítja az alkalmazáskonfiguráció sessionState elemében. További információ: Session-State módok.
A munkamenet-állapot alternatívái közé tartozik az alkalmazás állapota (lásd a Application tulajdonságot) és a ASP.NET gyorsítótár (lásd a System.Web.Caching névteret), amely olyan változókat tárol, amelyeket egy ASP.NET-alkalmazás összes felhasználója elérhet; a ASP.NET profil (lásd a System.Web.Profile névteret), amely időtúllépés nélkül megőrzi a felhasználói értékeket egy adattárban; ASP.NET System.Web.UI.WebControls, amely megőrzi a vezérlőértékeket a ViewState; Cookies; a QueryString tulajdonság; és a HTTP-POST a Form gyűjtemény használatával elérhető HTML-űrlap mezői. A munkamenet-állapot és más állapotkezelési alternatívák közötti különbségekről további információt a ASP.NET Állapotkezelési javaslatok című témakörben talál.
Tulajdonságok
| Name | Description |
|---|---|
| CodePage |
Lekéri vagy beállítja az aktuális munkamenethez tartozó karakterkészlet-azonosítót. |
| Contents |
Az aktuális munkamenet-állapot objektumra mutató hivatkozást kap. |
| CookieMode |
Olyan értéket kap, amely jelzi, hogy az alkalmazás konfigurálva van-e cookie nélküli munkamenetekhez. |
| Count |
Lekéri a munkamenet-állapot gyűjteményében lévő elemek számát. |
| IsCookieless |
Beolvas egy értéket, amely jelzi, hogy a munkamenet-azonosító beágyazva van-e az URL-címbe, vagy EGY HTTP-cookie-ban van-e tárolva. |
| IsNewSession |
Beolvas egy értéket, amely jelzi, hogy a munkamenet az aktuális kéréssel lett-e létrehozva. |
| IsReadOnly |
Beolvas egy értéket, amely jelzi, hogy a munkamenet írásvédett-e. |
| IsSynchronized |
Beolvas egy értéket, amely jelzi, hogy a munkamenet-állapot értékeinek gyűjteményéhez való hozzáférés szinkronizálva van-e (a szál biztonságos). |
| Item[Int32] |
Beolvas vagy beállít egy munkamenet-értéket numerikus index alapján. |
| Item[String] |
Beolvas vagy beállít egy munkamenet-értéket név szerint. |
| Keys |
Lekéri a munkamenet-állapot gyűjteményében tárolt összes érték kulcsainak gyűjteményét. |
| LCID |
Lekéri vagy beállítja az aktuális munkamenet területi azonosítóját (LCID). |
| Mode |
Lekéri az aktuális munkamenet-állapot módot. |
| SessionID |
Lekéri a munkamenet egyedi azonosítót. |
| StaticObjects |
Lekéri |
| SyncRoot |
Lekéri a munkamenet-állapot értékeinek gyűjteményéhez való hozzáférés szinkronizálására használható objektumot. |
| Timeout |
Percek alatt lekéri vagy beállítja a kérések között engedélyezett időt, mielőtt a munkamenet-állapot szolgáltatója leállítja a munkamenetet. |
Metódusok
| Name | Description |
|---|---|
| Abandon() |
Megszakítja az aktuális munkamenetet. |
| Add(String, Object) |
Új elemet ad hozzá a munkamenet-állapot gyűjteményéhez. |
| Clear() |
Eltávolítja az összes kulcsot és értéket a munkamenet-állapot gyűjteményéből. |
| CopyTo(Array, Int32) |
A munkamenet-állapot értékeinek gyűjteményét egy egydimenziós tömbbe másolja, a tömb megadott indexétől kezdve. |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| GetEnumerator() |
Egy enumerátort ad vissza, amely az aktuális munkamenet összes munkamenet-állapot változójának beolvasására használható. |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| Remove(String) |
Töröl egy elemet a munkamenet-állapot gyűjteményéből. |
| RemoveAll() |
Eltávolítja az összes kulcsot és értéket a munkamenet-állapot gyűjteményéből. |
| RemoveAt(Int32) |
Egy adott index elemének törlése a munkamenet-állapot gyűjteményéből. |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |
Bővítő metódusok
| Name | Description |
|---|---|
| AsParallel(IEnumerable) |
Lehetővé teszi a lekérdezés párhuzamosítását. |
| AsQueryable(IEnumerable) |
Átalakítja az egyiket IEnumerableIQueryable. |
| Cast<TResult>(IEnumerable) |
Egy elem elemeit IEnumerable a megadott típusra veti. |
| OfType<TResult>(IEnumerable) |
Egy adott típus alapján szűri IEnumerable egy adott elem elemeit. |