ASP.NET-sessiebeheer [voorbeeld]
⚡ Slimme samenvatting
Met ASP.NET Session Management kan een stateless HTTP-applicatie gebruikersgegevens bewaren tussen verschillende verzoeken. Het legt ViewState uit, het Session-object voor het opslaan van sleutel-waardeparen, een werkend voorbeeld, sessiestatusmodi, time-outconfiguratie en de voordelen van sessiestatus.
ASP.NET-sessiebeheer
Het HTTP-protocol waarop alle webapplicaties werken is een stateless protocol. Met staatloos betekent dit alleen dat informatie van het ene verzoek naar het andere niet wordt bewaard.
Bijvoorbeeld, als u een loginpagina had met 2 tekstvakken, één voor de naam en de andere voor het wachtwoord. Wanneer u op de Login-knop op die pagina klikt, moet de applicatie ervoor zorgen dat de gebruikersnaam en het wachtwoord worden doorgegeven aan de volgende pagina.
In ASP.Net gebeurt dit op verschillende manieren. De eerste manier is via een concept genaamd ViewState. Hierin slaat ASP.Net automatisch de inhoud van alle besturingselementen op. Het zorgt er ook voor dat deze inhoud wordt doorgegeven aan de volgende pagina. Dit gebeurt via een eigenschap genaamd ViewState.
Het is niet ideaal voor een ontwikkelaar om iets in de weergavestatus te wijzigen. Dit komt omdat het alleen door ASP.Net moet worden afgehandeld.
ASP.NET-sessieobject
De andere manier is om een object te gebruiken dat een ‘sessieobject’ wordt genoemd. Het Session-object is beschikbaar gedurende de gehele levenscyclus van de applicatie. U kunt een willekeurig aantal sleutelwaardeparen opslaan in het sessieobject. U kunt dus op elke pagina een waarde opslaan in het Session-object via de onderstaande coderegel.
Session["Key"] = value
Dit slaat de waarde op in een Session-object, waarbij het 'key'-gedeelte wordt gebruikt om de waarde een naam te geven. Hierdoor kan de waarde later worden opgevraagd. Om een waarde op te vragen, kunt u eenvoudig de onderstaande instructie gebruiken.
Session["Key"]
ASP.NET Sessieobject Voorbeeld
In ons voorbeeld gebruiken we het Session-object om de naam op te slaan die in het naamveld op de pagina is ingevoerd. Vervolgens halen we die waarde op en tonen we deze op de pagina. Voeg de onderstaande code toe aan het bestand 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 Uitleg:-
- De eerste regel code neemt de waarde van het tekstvak 'Name' en slaat deze op in het Session-object. Door de code Session["Name"] te specificeren, geven we de eigenschap een naam, namelijk "Name". Door een naam aan de eigenschap toe te kennen, is deze later gemakkelijker op te halen.
- De volgende coderegel haalt de opgeslagen waarde op uit het Session-object. Vervolgens schrijft het deze waarde via de 'Response.Write'-methode terug naar de client.
- Tot slot maken we alle besturingselementen op het formulier onzichtbaar. Als we dit niet doen, worden alle besturingselementen plus de responswaarden tegelijk weergegeven.
Nadat u de bovenstaande wijzigingen hebt aangebracht, ziet u de volgende uitvoer.
Output:
Uit de uitvoer kunt u zien dat de sessiewaarde van naam is opgehaald en in de browser wordt weergegeven.
ASP.NET-sessiestatusmodi
ASP.NET kan sessiegegevens op verschillende plaatsen opslaan, in zogenaamde sessiestatusmodi. De gekozen modus is van invloed op de prestaties, schaalbaarheid en of gegevens behouden blijven na een herstart van de applicatie. De onderstaande tabel vergelijkt de verschillende modi:
| Mode | Waar de status wordt opgeslagen | Best voor |
|---|---|---|
| InProc | In het geheugen van de webserver (standaard) | Apps met één server; het snelst, maar de prestaties gaan verloren bij een herstart. |
| Statusserver | Een afzonderlijk ASP.NET State Service-proces | Webfarms; blijft intact na herstart van de applicatie. |
| SQLServer | Een SQL Server-database | Webfarms die een duurzame, schaalbare status nodig hebben |
| Op Maat | Een aangepaste provider die u implementeert | Gespecialiseerde winkels zoals Redis |
| af | Sessiestatus uitgeschakeld | Applicaties die geen sessies nodig hebben |
InProc is de standaard en de snelste optie, maar voor load-balanced implementaties zorgen StateServer of SQLServer ervoor dat sessies beschikbaar blijven op meerdere servers.
Hoe configureer ik een sessietime-out in ASP.NET?
Een sessie duurt niet eeuwig; deze verloopt na een periode van inactiviteit. Je kunt deze time-out instellen in het web.config-bestand met behulp van het element sessionState, waarbij de time-outwaarde in minuten wordt weergegeven:
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
Je kunt het ook in de code instellen met Session.Timeout = 30;De standaard time-out is 20 minuten. Het kiezen van een kortere time-out zorgt ervoor dat het servergeheugen sneller vrijkomt en de beveiliging verbetert, terwijl een langere time-out ervoor zorgt dat gebruikers langer ingelogd blijven.
Voordelen en nadelen van een zittingsstaat
Sessiestatus is handig, maar er zijn nadelen aan verbonden die je moet afwegen voordat je er te veel op vertrouwt.
Voordelen:
- Eenvoudig in gebruik voor het opslaan van gebruikersspecifieke gegevens, zoals bijvoorbeeld een winkel.ping winkelwagen- of inloggegevens.
- Kan complexe objecten opslaan, niet alleen tekenreeksen.
- De gegevens worden op de server bewaard, waardoor ze veiliger zijn dan opslag aan de clientzijde.
Nadelen:
- De InProc-modus verbruikt servergeheugen en is niet schaalbaar over een webfarm.
- Sessiegegevens gaan verloren wanneer de sessie verloopt of de applicatie opnieuw opstart (in InProc-modus).
- Het opslaan van grote hoeveelheden data per gebruiker kan de prestaties negatief beïnvloeden bij zware belasting.



