ASP.NET-sessionshantering [Exempel]
โก Smart sammanfattning
ASP.NET Session Management lรฅter en tillstรฅndslรถs HTTP-applikation komma ihรฅg anvรคndardata รถver fรถrfrรฅgningar. Den fรถrklarar ViewState, Session-objektet fรถr att lagra nyckel-vรคrde-par, ett fungerande exempel, sessionstillstรฅndslรคgen, timeout-konfiguration och fรถrdelarna med sessionstillstรฅnd.
ASP.NET Sessionshantering
HTTP-protokollet som alla webbapplikationer fungerar pรฅ รคr ett tillstรฅndslรถst protokoll. Med statslรถs betyder det bara att information inte lagras frรฅn en begรคran till en annan.
Om du till exempel hade en inloggningssida som har 2 textrutor, en fรถr namnet och den andra fรถr lรถsenordet. Nรคr du klickar pรฅ knappen Logga in pรฅ den sidan mรฅste applikationen se till att anvรคndarnamnet och lรถsenordet skickas till nรคsta sida.
I ASP.Net gรถrs detta pรฅ en mรคngd olika sรคtt. Det fรถrsta sรคttet รคr via ett koncept som kallas ViewState. Det รคr hรคr ASP.Net automatiskt lagrar innehรฅllet i alla kontroller. Det sรคkerstรคller ocksรฅ att detta skickas vidare till nรคsta sida. Detta gรถrs via en egenskap som kallas ViewState.
Det รคr inte idealiskt fรถr en utvecklare att รคndra nรฅgot i vytillstรฅndet. Detta beror pรฅ att det endast ska hanteras av ASP.Net.
ASP.NET Session-objekt
Det andra sรคttet รคr att anvรคnda ett objekt som kallas "sessionsobjekt". Session-objektet รคr tillgรคngligt under hela programmets livscykel. Du kan lagra valfritt antal nyckel-vรคrdepar i Session-objektet. Sรฅ pรฅ vilken sida som helst kan du lagra ett vรคrde i Session-objektet via kodraden nedan.
Session["Key"] = value
Detta lagrar vรคrdet i ett Session-objekt, och 'nyckel'-delen anvรคnds fรถr att ge vรคrdet ett namn. Detta gรถr att vรคrdet kan hรคmtas vid en senare tidpunkt. Fรถr att hรคmta ett vรคrde kan du helt enkelt anvรคnda kommandot nedan.
Session["Key"]
ASP.NET Sessionsobjekt Exempel
I vรฅrt exempel ska vi anvรคnda Session-objektet fรถr att lagra namnet som angetts i namntextrutan pรฅ sidan. Vi ska sedan hรคmta det vรคrdet och visa det pรฅ sidan i enlighet dรคrmed. Lรฅt oss lรคgga till koden nedan i 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 Fรถrklaring:-
- Den fรถrsta raden kod tar vรคrdet frรฅn textrutekontrollen Name och lagrar det i Session-objektet. Genom att ange koden fรถr Session["Name"] ger vi egenskapen ett namn som heter "Name". Genom att ange ett namn fรถr egenskapen blir det enklare att hรคmta det vid en senare tidpunkt.
- Nรคsta rad kod hรคmtar det lagrade vรคrdet frรฅn Session-objektet. Den skriver sedan detta vรคrde via 'Response.Write'-metoden tillbaka till klienten.
- Slutligen gรถr vi alla kontroller i formulรคret osynliga. Om vi โโinte gรถr detta kommer alla kontroller plus vรฅra svarsvรคrden att visas tillsammans.
Nรคr du har gjort ovanstรฅende รคndringar kommer du att se fรถljande utdata.
Produktion:
Frรฅn utgรฅngen kan du se att sessionsvรคrdet fรถr namnet hรคmtades och visades i webblรคsaren.
ASP.NET-sessionstillstรฅndslรคgen
ASP.NET kan lagra sessionsdata pรฅ flera stรคllen, kallade sessionstillstรฅndslรคgen. Det lรคge du vรคljer pรฅverkar prestanda, skalbarhet och huruvida data รถverlever en omstart av programmet. Tabellen nedan jรคmfรถr dem:
| Mode | Var tillstรฅndet lagras | Bรคst fรถr |
|---|---|---|
| InProc | I webbserverns minne (standard) | Appar fรถr en server; snabbast, men fรถrlorade vid omstart |
| StateServer | En separat ASP.NET State Service-process | Webfarmar; รถverlever omstart av applikationer |
| SQLServer | En SQL Server-databas | Webfarmar behรถver hรฅllbart, skalbart tillstรฅnd |
| Custom | En anpassad leverantรถr som du implementerar | Specialbutiker som Redis |
| off | Sessionsstatus inaktiverad | Applikationer som inte behรถver sessioner |
InProc รคr standard och det snabbaste, men fรถr belastningsbalanserade distributioner hรฅller StateServer eller SQLServer sessioner tillgรคngliga รถver flera servrar.
Sรฅ hรคr konfigurerar du sessionstimeout i ASP.NET
En session varar inte fรถr evigt; den lรถper ut efter en viss period av inaktivitet. Du kan stรคlla in denna timeout i web.config-filen med hjรคlp av sessionState-elementet, dรคr timeout-vรคrdet รคr i minuter:
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
Du kan ocksรฅ stรคlla in det i kod med Session.Timeout = 30;Standardtidsgrรคnsen รคr 20 minuter. Om du vรคljer en kortare tidsgrรคns frigรถrs serverminne snabbare och sรคkerheten fรถrbรคttras, medan en lรคngre tidsgrรคns hรฅller anvรคndarna inloggade lรคngre.
Fรถrdelar och nackdelar med sessionstillstรฅnd
Sessionstillstรฅndet รคr bekvรคmt, men det finns avvรคgningar som du bรถr vรคga in innan du fรถrlitar dig i stor utstrรคckning pรฅ det.
fรถrdelar:
- Enkel att anvรคnda fรถr att lagra data per anvรคndare, till exempel en butikping varukorg eller inloggningsuppgifter.
- Kan lagra komplexa objekt, inte bara strรคngar.
- Data lagras pรฅ servern, sรฅ det รคr sรคkrare รคn lagring pรฅ klientsidan.
Nackdelar:
- InProc-lรคget fรถrbrukar serverminne och skalas inte รถver en webbfarm.
- Sessionsdata gรฅr fรถrlorade nรคr sessionen nรฅr tidsgrรคnsen eller programmet startas om (i InProc-lรคge).
- Att lagra stora mรคngder data per anvรคndare kan fรถrsรคmra prestandan under hรถg belastning.



