Gestione delle sessioni ASP.NET [Esempio]
⚡ Riepilogo intelligente
ASP.NET Session Management consente a un'applicazione HTTP stateless di memorizzare i dati dell'utente tra le richieste. Questo documento illustra ViewState, l'oggetto Session per la memorizzazione di coppie chiave-valore, fornisce un esempio pratico, spiega le modalità di gestione dello stato della sessione, la configurazione del timeout e illustra i vantaggi dello stato della sessione.
Gestione delle sessioni ASP.NET
Il protocollo HTTP su cui funzionano tutte le applicazioni web è un protocollo stateless. Per apolide significa semplicemente che le informazioni non vengono conservate da una richiesta all'altra.
Ad esempio, se hai una pagina di login con 2 caselle di testo, una per il nome e l'altra per la password. Quando clicchi sul pulsante Login in quella pagina, l'applicazione deve assicurarsi che username e password vengano passati alla pagina successiva.
In ASP.Net, questo viene fatto in diversi modi. Il primo è tramite un concetto chiamato ViewState. È qui che ASP.Net memorizza automaticamente il contenuto di tutti i controlli. Si assicura inoltre che questo venga passato alla pagina successiva. Questo viene fatto tramite una proprietà chiamata ViewState.
Non è l'ideale per uno sviluppatore modificare qualcosa nello stato di visualizzazione. Questo perché dovrebbe essere gestito solo da ASP.Net.
Oggetto sessione ASP.NET
L’altro modo è utilizzare un oggetto chiamato “Session Object”. L'oggetto Session è disponibile per tutto il ciclo di vita dell'applicazione. È possibile memorizzare un numero qualsiasi di coppie chiave-valore nell'oggetto Session. Pertanto, su qualsiasi pagina, puoi memorizzare un valore nell'oggetto Session tramite la riga di codice sottostante.
Session["Key"] = value
Questo memorizza il valore in un oggetto Session e la parte 'key' viene utilizzata per assegnare un nome al valore. Ciò consente di recuperare il valore in un secondo momento. Per recuperare un valore, è sufficiente eseguire l'istruzione seguente.
Session["Key"]
Esempio di oggetto sessione ASP.NET
Nel nostro esempio, useremo l'oggetto Session per memorizzare il nome inserito nel campo di testo "Nome" della pagina. Successivamente, recupereremo tale valore e lo visualizzeremo sulla pagina di conseguenza. Aggiungiamo il codice seguente al file 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 Spiegazione:-
- La prima riga di codice prende il valore del controllo della casella di testo Nome e lo memorizza nell'oggetto Session. Specificando il codice di Session["Nome"], assegniamo alla proprietà il nome "Nome". Specificando un nome per la proprietà, diventa più facile recuperarla in un secondo momento.
- La riga successiva di codice recupera il valore memorizzato dall'oggetto Session. Quindi riscrive questo valore sul client tramite il metodo "Response.Write".
- Infine, rendiamo invisibili tutti i controlli del modulo. Se non lo facciamo, tutti i controlli e i valori di risposta saranno visualizzati insieme.
Una volta apportate le modifiche di cui sopra, visualizzerai il seguente output.
Produzione:
Dall'output, puoi vedere che il valore Session di name è stato recuperato e visualizzato nel browser.
Modalità di stato della sessione ASP.NET
ASP.NET può memorizzare i dati di sessione in diverse posizioni, denominate modalità di stato della sessione. La modalità scelta influisce sulle prestazioni, sulla scalabilità e sulla persistenza dei dati al riavvio dell'applicazione. La tabella seguente le confronta:
| Moda | Dove viene memorizzato lo stato | migliori per |
|---|---|---|
| InProc | Nella memoria del server web (impostazione predefinita) | Applicazioni a server singolo: le più veloci, ma perse al riavvio. |
| Server di stato | Un processo separato del servizio di stato ASP.NET | Web farm; sopravvive ai riavvii dell'applicazione |
| Server SQL | Un database SQL Server | Le farm web necessitano di uno stato durevole e scalabile |
| Custom | Un provider personalizzato che implementi | Negozi specializzati come Redis |
| sconto | Stato della sessione disabilitato | Applicazioni che non necessitano di sessioni |
InProc è l'impostazione predefinita e la più veloce, ma per le implementazioni con bilanciamento del carico, StateServer o SQLServer mantengono le sessioni disponibili su più server.
Come configurare il timeout di sessione in ASP.NET
Una sessione non dura indefinitamente; scade dopo un periodo di inattività. È possibile impostare questo timeout nel file web.config utilizzando l'elemento sessionState, dove il valore di timeout è espresso in minuti:
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
È possibile impostarlo anche nel codice con Session.Timeout = 30;Il timeout predefinito è di 20 minuti. Scegliendo un timeout più breve, la memoria del server viene liberata più rapidamente e la sicurezza migliora, mentre un timeout più lungo mantiene gli utenti connessi per un periodo maggiore.
Vantaggi e svantaggi dello Stato di sessione
Lo stato di sessione è comodo, ma presenta dei compromessi che è bene valutare prima di farvi affidamento in modo significativo.
vantaggi:
- Semplice da usare per memorizzare dati per utente come un negozioping Dati del carrello o di accesso.
- Può memorizzare oggetti complessi, non solo stringhe.
- I dati vengono conservati sul server, quindi sono più sicuri rispetto all'archiviazione lato client.
svantaggi:
- La modalità InProc consuma memoria del server e non è scalabile su un'intera web farm.
- I dati della sessione vengono persi quando la sessione scade o l'applicazione viene riavviata (in modalità InProc).
- L'archiviazione di grandi quantità di dati per utente può compromettere le prestazioni in condizioni di carico elevato.



