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.

  • ๐ŸŒ Statslรถs HTTP: HTTP lagrar inte data mellan fรถrfrรฅgningar, sรฅ ASP.NET lรคgger till mekanismer fรถr att bevara tillstรฅnd.
  • ๐Ÿ—‚๏ธ Vytillstรฅnd: ViewState รถverfรถr automatiskt kontrollvรคrden frรฅn en sida till nรคsta.
  • ๐Ÿ”‘ Sessionsobjekt: Session["Key"] lagrar och hรคmtar nyckel-vรคrde-par under hela applikationens livscykel.
  • โš™๏ธ Tillstรฅndslรคgen: Sessionstillstรฅnd kan lagras InProc, pรฅ en StateServer, i SQL Server eller i ett anpassat arkiv.
  • โฑ๏ธ Tidsgrรคns: Timeout-vรคrdet sessionState i web.config styr hur lรคnge en session fรถrblir aktiv.

Handledning fรถr ASP.NET-sessionshantering med exempel

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.

Anvรคnd sessionsobjektet

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

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

Anvรคnd sessionsobjektet

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.

Vanliga frรฅgor

Ja. AI-assistenter kan generera kod fรถr att lagra och lรคsa sessionsvรคrden, fรถreslรฅ rรคtt tillstรฅndslรคge och skriva web.config-instรคllningarna. RevVisa den genererade koden fรถr att bekrรคfta att den passar dina skalbarhets- och sรคkerhetsbehov.

Ja. AI-baserade kodgranskningsverktyg kan flagga risker som sessionsfixering, saknade HTTPS-cookies eller lagring av kรคnslig data i sessionen. Behandla resultaten som vรคgledning och bekrรคfta korrigeringar med sรคkerhetstester fรถre driftsรคttning.

Sessionsstatus lagrar data fรถr en enskild anvรคndares session, medan programstatus lagrar data som delas av alla anvรคndare av programmet. Anvรคnd Session fรถr vรคrden per anvรคndare och Program fรถr globala data som rรคknare eller konfiguration.

Nej. Varje anvรคndare fรฅr en separat session, identifierad av ett unikt sessions-ID som lagras i en cookie. En anvรคndare kan inte lรคsa en annan anvรคndares sessionsvรคrden, vilket รคr anledningen till att Session anvรคnds fรถr data per anvรคndare.

Sammanfatta detta inlรคgg med: