Správa relací ASP.NET [Příklad]
⚡ Chytré shrnutí
Správa relací ASP.NET umožňuje bezstavové HTTP aplikaci pamatovat si uživatelská data napříč požadavky. Vysvětluje ViewState, objekt Session pro ukládání párů klíč-hodnota, funkční příklad, režimy stavu relace, konfiguraci časového limitu a výhody stavu relace.
Správa relací ASP.NET
Protokol HTTP, na kterém fungují všechny webové aplikace, je bezstavový protokol. Pojem bez státní příslušnosti pouze znamená, že informace nejsou uchovávány z jedné žádosti do druhé.
Například, pokud jste měli přihlašovací stránku, která má 2 textová pole, jedno pro jméno a druhé pro heslo. Když na této stránce kliknete na tlačítko Přihlásit, aplikace musí zajistit, aby bylo uživatelské jméno a heslo předáno na další stránku.
V ASP.Net se to dělá různými způsoby. Prvním způsobem je koncept zvaný ViewState. Zde ASP.Net automaticky ukládá obsah všech ovládacích prvků. Také zajišťuje, aby byl tento obsah předán na další stránku. To se provádí pomocí vlastnosti s názvem ViewState.
Pro vývojáře není ideální cokoliv měnit ve stavu pohledu. Je to proto, že by to mělo být zpracováno pouze ASP.Net.
Objekt relace ASP.NET
Druhým způsobem je použití objektu zvaného „Objekt relace“. Objekt Session je dostupný po celou dobu životního cyklu aplikace. V objektu Session můžete uložit libovolný počet párů klíč–hodnota. Na libovolné stránce tedy můžete uložit hodnotu do objektu Session prostřednictvím níže uvedeného řádku kódu.
Session["Key"] = value
Tím se hodnota uloží do objektu Session a část „klíč“ se použije k pojmenování hodnoty. To umožňuje načíst hodnotu později. Chcete-li načíst hodnotu, můžete jednoduše zadat následující příkaz.
Session["Key"]
Příklad objektu relace ASP.NET
V našem příkladu použijeme objekt Session k uložení názvu zadaného do textového pole s názvem na stránce. Tuto hodnotu pak načteme a zobrazíme ji na stránce. Do souboru Demo.aspx.cs přidejme níže uvedený kód.
protected void btnSubmit_Click(object sender, EventArgs e) { Session["Name"] = txtName.Text; Response.Write(Session["Name"]); lblName.Visible = false; txtName.Visible = false; lstLocation.Visible = false; chkC.Visible = false; chkASP.Visible = false; rdMale.Visible = false; rdFemale.Visible = false; btnSubmit.Visible = false; }
Code Vysvětlení:-
- První řádek kódu bere hodnotu textového pole Name a ukládá ji do objektu Session. Zadáním kódu Session[„Name“] pojmenujeme vlastnost s názvem „Name“. Zadáním názvu vlastnosti se její pozdější načtení snadněji provede.
- Další řádek kódu načte uloženou hodnotu z objektu Session. Tuto hodnotu pak zapíše pomocí metody 'Response.Write' zpět klientovi.
- Nakonec všechny ovládací prvky na formuláři nastavíme jako neviditelné. Pokud to neuděláme, zobrazí se všechny ovládací prvky a hodnoty našich odpovědí společně.
Jakmile provedete výše uvedené změny, uvidíte následující výstup.
Výstup:
Z výstupu můžete vidět, že hodnota Session názvu byla načtena a zobrazena v prohlížeči.
Režimy stavu relace ASP.NET
ASP.NET může ukládat data relací na několik míst, nazývaných režimy stavu relace. Zvolený režim ovlivňuje výkon, škálovatelnost a to, zda data přežijí restart aplikace. Následující tabulka je porovnává:
| režim | Kde je stav uložen | Nejlepší pro |
|---|---|---|
| Vstupní proces | V paměti webového serveru (výchozí) | Aplikace pro jeden server; nejrychlejší, ale po restartu se ztratí |
| StateServer | Samostatný proces služby ASP.NET State Service | Webové farmy; přežije restartování aplikace |
| Server SQL | Databáze SQL Serveru | Webové farmy potřebující odolný a škálovatelný stav |
| Zvyk | Vlastní poskytovatel, kterého implementujete | Specializované obchody jako Redis |
| pryč | Stav relace zakázán | Aplikace, které nepotřebují relace |
InProc je výchozí a nejrychlejší, ale pro nasazení s vyváženou zátěží udržuje StateServer nebo SQLServer relace dostupné napříč více servery.
Jak nakonfigurovat časový limit relace v ASP.NET
Relace netrvá věčně; její platnost vyprší po určité době nečinnosti. Tento časový limit můžete nastavit v souboru web.config pomocí elementu sessionState, kde hodnota časového limitu je v minutách:
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
Můžete to také nastavit v kódu pomocí Session.Timeout = 30;Výchozí časový limit je 20 minut. Volbou kratšího časového limitu se rychleji uvolní paměť serveru a zlepší se zabezpečení, zatímco delší časový limit udrží uživatele déle přihlášené.
Výhody a nevýhody stavu relace
Stav relace je pohodlný, ale má své kompromisy, které byste měli zvážit, než se na něj budete silně spoléhat.
Výhody:
- Snadné použití pro ukládání dat pro jednotlivé uživatele, například o obchoděping košík nebo přihlašovací údaje.
- Může ukládat složité objekty, nejen řetězce.
- Data jsou uchovávána na serveru, takže jsou bezpečnější než úložiště na straně klienta.
Nevýhody:
- Režim InProc spotřebovává paměť serveru a neškáluje se v rámci webové farmy.
- Data relace se ztratí, když relace vyprší nebo se aplikace restartuje (v režimu InProc).
- Ukládání velkého množství dat na uživatele může při velkém zatížení negativně ovlivnit výkon.



