ASP.NET Sessionsstyring [Eksempel]
โก Smart opsummering
ASP.NET Session Management lader en statslรธs HTTP-applikation huske brugerdata pรฅ tvรฆrs af anmodninger. Det forklarer ViewState, Session-objektet til lagring af nรธgle-vรฆrdi-par, et fungerende eksempel, sessionstilstandstilstande, timeout-konfiguration og fordelene ved sessionstilstand.
ASP.NET Sessionsstyring
HTTP-protokollen, som alle webapplikationer fungerer pรฅ, er en statslรธs protokol. Ved statslรธs betyder det blot, at oplysninger ikke opbevares fra en anmodning til en anden.
For eksempel, hvis du havde en login-side, som har 2 tekstbokse, en for navnet og den anden for adgangskoden. Nรฅr du klikker pรฅ Login-knappen pรฅ den side, skal applikationen sikre, at brugernavnet og adgangskoden sendes videre til nรฆste side.
I ASP.Net gรธres dette pรฅ en rรฆkke forskellige mรฅder. Den fรธrste mรฅde er via et koncept kaldet ViewState. Det er her, ASP.Net automatisk gemmer indholdet af alle kontrolelementerne. Det sikrer ogsรฅ, at dette sendes videre til den nรฆste side. Dette gรธres via en egenskab kaldet ViewState.
Det er ikke ideelt for en udvikler at รฆndre noget i visningstilstanden. Dette skyldes, at det kun skal hรฅndteres af ASP.Net.
ASP.NET Session objekt
Den anden mรฅde er at bruge et objekt kaldet et "sessionsobjekt". Session-objektet er tilgรฆngeligt i hele applikationens livscyklus. Du kan gemme et hvilket som helst antal nรธglevรฆrdi-par i Session-objektet. Sรฅ pรฅ enhver side kan du gemme en vรฆrdi i Session-objektet via nedenstรฅende kodelinje.
Session["Key"] = value
Dette gemmer vรฆrdien i et Session-objekt, og 'nรธgle'-delen bruges til at give vรฆrdien et navn. Dette gรธr det muligt at hente vรฆrdien pรฅ et senere tidspunkt. For at hente en vรฆrdi kan du blot udfรธre nedenstรฅende sรฆtning.
Session["Key"]
ASP.NET Session objekt Eksempel
I vores eksempel bruger vi Session-objektet til at gemme det navn, der er indtastet i tekstfeltet "navn" pรฅ siden. Vi henter derefter vรฆrdien og viser den pรฅ siden i overensstemmelse hermed. Lad os tilfรธje nedenstรฅende kode til Demo.aspx.cs-filen.
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 Forklaring:-
- Den fรธrste kodelinje tager vรฆrdien fra tekstbokskontrollen Navn og gemmer den i Session-objektet. Ved at angive koden Session["Navn"] giver vi egenskaben et navn kaldet "Navn". Ved at angive et navn til egenskaben bliver det nemmere at hente den pรฅ et senere tidspunkt.
- Den nรฆste kodelinje henter den lagrede vรฆrdi fra Session-objektet. Den skriver derefter denne vรฆrdi via 'Response.Write' metoden tilbage til klienten.
- Til sidst gรธr vi alle kontrolelementerne pรฅ formularen usynlige. Hvis vi ikke gรธr dette, vil alle kontrolelementerne plus vores svarvรฆrdier blive vist sammen.
Nรฅr du har foretaget ovenstรฅende รฆndringer, vil du se fรธlgende output.
Output:
Fra outputtet kan du se, at sessionsvรฆrdien for navnet blev hentet og vist i browseren.
ASP.NET-sessionstilstande
ASP.NET kan gemme sessionsdata flere steder, kaldet sessionstilstande. Den valgte tilstand pรฅvirker ydeevne, skalerbarhed og om data overlever en genstart af applikationen. Tabellen nedenfor sammenligner dem:
| tilstand | Hvor tilstanden er gemt | Bedste for |
|---|---|---|
| InProc | I webserverens hukommelse (standard) | Enkeltserver-apps; hurtigst, men tabt ved genstart |
| StateServer | En separat ASP.NET State Service-proces | Webfarme; overlever genstart af applikationer |
| SQLServer | En SQL Server-database | Webfarme har brug for en holdbar, skalerbar tilstand |
| Tilpasset | En brugerdefineret udbyder, du implementerer | Specialbutikker som Redis |
| af | Sessionstilstand deaktiveret | Applikationer, der ikke krรฆver sessioner |
InProc er standarden og den hurtigste, men til load-balanced implementeringer holder StateServer eller SQLServer sessioner tilgรฆngelige pรฅ tvรฆrs af flere servere.
Sรฅdan konfigurerer du sessionstimeout i ASP.NET
En session varer ikke evigt; den udlรธber efter en periode med inaktivitet. Du kan indstille denne timeout i web.config-filen ved hjรฆlp af sessionState-elementet, hvor timeout-vรฆrdien er i minutter:
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
Du kan ogsรฅ indstille det i kode med Session.Timeout = 30;Standard timeout er 20 minutter. Valg af en kortere timeout frigรธr serverhukommelse hurtigere og forbedrer sikkerheden, mens en lรฆngere timeout holder brugerne logget ind i lรฆngere tid.
Fordele og ulemper ved sessionstilstand
Sessionstilstanden er praktisk, men den har kompromiser, du bรธr afveje, fรธr du er i stor grad afhรฆngig af den.
fordele:
- Nem at bruge til lagring af brugerdata, f.eks. en butikping indkรธbskurv eller loginoplysninger.
- Kan gemme komplekse objekter, ikke kun strenge.
- Data opbevares pรฅ serveren, sรฅ det er mere sikkert end klientsidelagring.
Ulemper:
- InProc-tilstand forbruger serverhukommelse og skalerer ikke pรฅ tvรฆrs af en webfarm.
- Sessionsdata gรฅr tabt, nรฅr sessionen fรฅr timeout, eller applikationen genstartes (i InProc-tilstand).
- Lagring af store mรฆngder data pr. bruger kan forringe ydeevnen under tung belastning.



