Gestionarea sesiunilor ASP.NET [Exemplu]

โšก Rezumat inteligent

ASP.NET Session Management permite unei aplicaศ›ii HTTP fฤƒrฤƒ stare sฤƒ reศ›inฤƒ datele utilizatorilor รฎn cadrul cererilor. Acesta explicฤƒ ViewState, obiectul Session pentru stocarea perechilor cheie-valoare, un exemplu funcศ›ional, modurile de stare a sesiunii, configurarea timeout-ului ศ™i avantajele stฤƒrii sesiunii.

  • ๐ŸŒ HTTP fฤƒrฤƒ stare: HTTP nu reศ›ine datele รฎntre cereri, aศ™a cฤƒ ASP.NET adaugฤƒ mecanisme pentru a pฤƒstra starea.
  • ๐Ÿ—‚๏ธ Stare de vizualizare: ViewState transportฤƒ automat valorile de control de la o paginฤƒ la alta.
  • ๐Ÿ”‘ Obiect de sesiune: Session[โ€žKeyโ€] stocheazฤƒ ศ™i preia perechi cheie-valoare pe tot parcursul ciclului de viaศ›ฤƒ al aplicaศ›iei.
  • โš™๏ธ Moduri de stare: Starea sesiunii poate fi stocatฤƒ รฎn Proc, pe un StateServer, รฎn SQL Server sau รฎntr-un depozit personalizat.
  • โฑ๏ธ Pauzฤƒ: Timeout-ul sessionState din web.config controleazฤƒ durata de viaศ›ฤƒ a unei sesiuni.

Tutorial de gestionare a sesiunilor ASP.NET cu exemplu

Managementul sesiunii ASP.NET

Protocolul HTTP pe care funcศ›ioneazฤƒ toate aplicaศ›iile web este un protocol fฤƒrฤƒ stat. Prin apatrid, รฎnseamnฤƒ doar cฤƒ informaศ›iile nu sunt reศ›inute de la o cerere la alta.

De exemplu, dacฤƒ aศ›i avut o paginฤƒ de conectare care are 2 casete text, una pentru nume ศ™i cealaltฤƒ pentru parolฤƒ. Cรขnd faceศ›i clic pe butonul Conectare de pe pagina respectivฤƒ, aplicaศ›ia trebuie sฤƒ se asigure cฤƒ numele de utilizator ศ™i parola sunt transmise pe pagina urmฤƒtoare.

รŽn ASP.Net, acest lucru se realizeazฤƒ รฎn diverse moduri. Prima modalitate este prin intermediul unui concept numit ViewState. Aici ASP.Net stocheazฤƒ automat conศ›inutul tuturor controalelor. De asemenea, se asigurฤƒ cฤƒ acesta este transmis paginii urmฤƒtoare. Acest lucru se face prin intermediul unei proprietฤƒศ›i numite ViewState.

Nu este ideal ca un dezvoltator sฤƒ schimbe ceva รฎn starea de vizualizare. Acest lucru se datoreazฤƒ faptului cฤƒ ar trebui sฤƒ fie gestionat numai de ASP.Net.

Obiect de sesiune ASP.NET

Cealaltฤƒ modalitate este sฤƒ utilizaศ›i un obiect numit โ€žObiect de sesiuneโ€. Obiectul Session este disponibil pe tot parcursul ciclului de viaศ›ฤƒ al aplicaศ›iei. Puteศ›i stoca orice numฤƒr de perechi cheie-valoare รฎn obiectul Session. Deci, pe orice paginฤƒ, puteศ›i stoca o valoare รฎn obiectul Session prin linia de cod de mai jos.

Session["Key"] = value

Aceasta stocheazฤƒ valoarea รฎntr-un obiect Session, iar partea โ€žcheieโ€ este utilizatฤƒ pentru a da un nume valorii. Aceasta permite recuperarea valorii ulterior. Pentru a recupera o valoare, puteศ›i pur ศ™i simplu sฤƒ executaศ›i instrucศ›iunea de mai jos.

Session["Key"]

Obiect de sesiune ASP.NET Exemplu

รŽn exemplul nostru, vom folosi obiectul Session pentru a stoca numele introdus รฎn cรขmpul text name de pe paginฤƒ. Apoi vom recupera acea valoare ศ™i o vom afiศ™a pe paginฤƒ รฎn mod corespunzฤƒtor. Sฤƒ adฤƒugฤƒm codul de mai jos รฎn fiศ™ierul Demo.aspx.cs.

Utilizaศ›i obiectul sesiune

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 Explicaลฃie:-

  1. Prima linie de cod preia valoarea controlului textbox Name ศ™i o stocheazฤƒ รฎn obiectul Session. Prin specificarea codului Session[โ€žNameโ€], atribuim proprietฤƒศ›ii un nume numit โ€žNameโ€. Prin specificarea unui nume pentru proprietate, devine mai uศ™or sฤƒ o regฤƒsiศ›i ulterior.
  2. Urmฤƒtoarea linie de cod preia valoarea stocatฤƒ din obiectul Session. Apoi scrie aceastฤƒ valoare prin metoda โ€žResponse.Writeโ€ รฎnapoi cฤƒtre client.
  3. รŽn cele din urmฤƒ, facem toate controalele din formular invizibile. Dacฤƒ nu facem acest lucru, toate controalele plus valorile noastre de rฤƒspuns vor fi afiศ™ate รฎmpreunฤƒ.

Dupฤƒ ce faceศ›i modificฤƒrile de mai sus, veศ›i vedea urmฤƒtorul rezultat.

ieศ™ire:

Utilizaศ›i obiectul sesiune

Din rezultat, puteศ›i vedea cฤƒ valoarea Session a numelui a fost preluatฤƒ ศ™i afiศ™atฤƒ รฎn browser.

Moduri de stare a sesiunii ASP.NET

ASP.NET poate stoca date de sesiune รฎn mai multe locuri, numite moduri de stare a sesiunii. Modul ales afecteazฤƒ performanศ›a, scalabilitatea ศ™i dacฤƒ datele supravieศ›uiesc unei reporniri a aplicaศ›iei. Tabelul de mai jos le comparฤƒ:

mod Unde este stocatฤƒ starea Cel mai bun pentru
รŽn proces รŽn memoria serverului web (implicit) Aplicaศ›ii cu un singur server; cele mai rapide, dar se pierd la repornire
StateServer Un proces separat de serviciu de stare ASP.NET Ferme web; supravieศ›uieศ™te repornirii aplicaศ›iilor
SQL Server O bazฤƒ de date SQL Server Fermele web au nevoie de o stare durabilฤƒ ศ™i scalabilฤƒ
pachet personalizat Un furnizor personalizat pe care รฎl implementaศ›i Magazine specializate precum Redis
de pe Starea sesiunii este dezactivatฤƒ Aplicaศ›ii care nu necesitฤƒ sesiuni

InProc este implicit ศ™i cel mai rapid, dar pentru implementฤƒrile cu sarcinฤƒ echilibratฤƒ, StateServer sau SQLServer menศ›ine sesiunile disponibile pe mai multe servere.

Cum se configureazฤƒ expirarea sesiunii รฎn ASP.NET

O sesiune nu dureazฤƒ la nesfรขrศ™it; expirฤƒ dupฤƒ o perioadฤƒ de inactivitate. Puteศ›i seta acest timeout รฎn fiศ™ierul web.config folosind elementul sessionState, unde valoarea timeout-ului este รฎn minute:

<configuration>
  <system.web>
    <sessionState mode="InProc" timeout="20" />
  </system.web>
</configuration>

De asemenea, รฎl puteศ›i seta รฎn cod cu Session.Timeout = 30;Timpul de expirare implicit este de 20 de minute. Alegerea unui timeout mai scurt elibereazฤƒ mai rapid memoria serverului ศ™i รฎmbunฤƒtฤƒศ›eศ™te securitatea, รฎn timp ce un timeout mai lung menศ›ine utilizatorii conectaศ›i mai mult timp.

Avantajele ศ™i dezavantajele stฤƒrii sesiunii

Starea sesiunii este convenabilฤƒ, dar are compromisuri pe care ar trebui sฤƒ le evaluaศ›i รฎnainte de a vฤƒ baza prea mult pe ea.

avantaje:

  • Uศ™or de utilizat pentru stocarea datelor per utilizator, cum ar fi un magazinping coศ™ sau detalii de autentificare.
  • Poate stoca obiecte complexe, nu doar ศ™iruri de caractere.
  • Datele sunt pฤƒstrate pe server, deci este mai sigur decรขt stocarea pe partea clientului.

Dezavantaje:

  • Modul InProc consumฤƒ memorie pe server ศ™i nu se scaleazฤƒ pe o fermฤƒ web.
  • Datele sesiunii se pierd cรขnd sesiunea expirฤƒ sau aplicaศ›ia reporneศ™te (รฎn modul InProc).
  • Stocarea unor cantitฤƒศ›i mari de date per utilizator poate afecta performanศ›a sub sarcinฤƒ intensฤƒ.

รŽntrebฤƒri frecvente

Da. Asistenศ›ii inteligenศ›i artificiali pot genera codul pentru stocarea ศ™i citirea valorilor sesiunii, pot sugera modul de stare corect ศ™i pot scrie setฤƒrile web.config. RevVizualizaศ›i codul generat pentru a confirma cฤƒ se potriveศ™te nevoilor dvs. de scalabilitate ศ™i securitate.

Da. Instrumentele de revizuire a codului bazate pe inteligenศ›ฤƒ artificialฤƒ pot semnala riscuri precum remedierea erorilor de sesiune, lipsa cookie-urilor HTTPS exclusive sau stocarea datelor sensibile รฎn sesiune. Trataศ›i constatฤƒrile ca รฎndrumฤƒri ศ™i confirmaศ›i remedierile cu teste de securitate รฎnainte de implementare.

Starea sesiunii stocheazฤƒ datele pentru sesiunea unui singur utilizator, รฎn timp ce starea aplicaศ›iei stocheazฤƒ datele partajate de toศ›i utilizatorii aplicaศ›iei. Folosiศ›i Sesiunea pentru valorile per utilizator ศ™i Aplicaศ›ia pentru date globale, cum ar fi contoare sau configuraศ›ie.

Nu. Fiecare utilizator primeศ™te o sesiune separatฤƒ, identificatฤƒ printr-un ID de sesiune unic stocat รฎntr-un cookie. Un utilizator nu poate citi valorile sesiunii unui alt utilizator, motiv pentru care se foloseศ™te Sesiunea pentru datele per utilizator.

Rezumaศ›i aceastฤƒ postare cu: