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.
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.
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:-
- 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.
- Urmฤtoarea linie de cod preia valoarea stocatฤ din obiectul Session. Apoi scrie aceastฤ valoare prin metoda โResponse.Writeโ รฎnapoi cฤtre client.
- ร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:
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ฤ.



