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.

  • 🌐 Stateless HTTP: HTTP bewaart geen gegevens tussen verzoeken, daarom voegt ASP.NET mechanismen toe om de status te behouden.
  • 🗂️ ViewState: ViewState draagt ​​automatisch besturingselementwaarden over van de ene pagina naar de volgende.
  • 🔑 Sessieobject: Session[“Key”] slaat sleutel-waardeparen op en haalt ze op gedurende de gehele levenscyclus van de applicatie.
  • ⚙️ Statusmodi: De sessiestatus kan worden opgeslagen in het proces zelf, op een StateServer, in SQL Server of in een aangepaste opslag.
  • Time-out: De `sessionState timeout` in `web.config` bepaalt hoe lang een sessie actief blijft.

ASP.NET-sessiebeheerhandleiding met voorbeeld

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.

Gebruik het sessieobject

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:-

  1. 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.
  2. 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.
  3. 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:

Gebruik het sessieobject

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.

Veelgestelde vragen

Ja. AI-assistenten kunnen de code genereren om sessiewaarden op te slaan en te lezen, de juiste statusmodus voor te stellen en de web.config-instellingen te schrijven. RevBekijk de gegenereerde code om te bevestigen dat deze voldoet aan uw schaalbaarheids- en beveiligingsbehoeften.

Ja. Op AI gebaseerde tools voor codebeoordeling kunnen risico's signaleren zoals sessiefixatie, ontbrekende HTTPS-cookies of het opslaan van gevoelige gegevens in de sessie. Beschouw de bevindingen als leidraad en bevestig de oplossingen met beveiligingstests vóór de implementatie.

De sessiestatus slaat gegevens op voor de sessie van één gebruiker, terwijl de applicatiestatus gegevens opslaat die door alle gebruikers van de applicatie worden gedeeld. Gebruik de sessiestatus voor waarden per gebruiker en de applicatiestatus voor algemene gegevens zoals tellers of configuratie-instellingen.

Nee. Elke gebruiker krijgt een aparte sessie, geïdentificeerd door een unieke sessie-ID die in een cookie is opgeslagen. De ene gebruiker kan de sessiegegevens van een andere gebruiker niet lezen, daarom wordt 'Sessie' gebruikt voor gebruikersspecifieke gegevens.

Vat dit bericht samen met: