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.

  • ๐ŸŒ HTTP senza stato: HTTP non conserva i dati tra una richiesta e l'altra, quindi ASP.NET aggiunge meccanismi per preservare lo stato.
  • ๐Ÿ—‚๏ธ ViewState: ViewState trasferisce automaticamente i valori dei controlli da una pagina all'altra.
  • ๐Ÿ”‘ Oggetto della sessione: Session[โ€œKeyโ€] memorizza e recupera coppie chiave-valore durante l'intero ciclo di vita dell'applicazione.
  • โš™๏ธ Modalitร  di stato: Lo stato della sessione puรฒ essere memorizzato in InProc, su un StateServer, in SQL Server o in un archivio personalizzato.
  • ๏ธ Tempo scaduto: Il parametro `sessionState` nel file `web.config` controlla per quanto tempo una sessione rimane attiva.

Tutorial sulla gestione delle sessioni ASP.NET con esempio

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.

Utilizzare l'oggetto sessione

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

  1. 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.
  2. La riga successiva di codice recupera il valore memorizzato dall'oggetto Session. Quindi riscrive questo valore sul client tramite il metodo "Response.Write".
  3. 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:

Utilizzare l'oggetto sessione

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.

DOMANDE FREQUENTI

Sรฌ. Gli assistenti basati sull'IA possono generare il codice per memorizzare e leggere i valori di sessione, suggerire la modalitร  di stato corretta e scrivere le impostazioni del file web.config. RevEsamina il codice generato per verificare che soddisfi le tue esigenze di scalabilitร  e sicurezza.

Sรฌ. Gli strumenti di revisione del codice basati sull'intelligenza artificiale possono segnalare rischi come il session fixation, la mancanza di cookie HTTPS-only o la memorizzazione di dati sensibili nella sessione. Considera i risultati come linee guida e conferma le correzioni con test di sicurezza prima della distribuzione.

Lo stato di sessione memorizza i dati relativi alla sessione di un singolo utente, mentre lo stato dell'applicazione memorizza i dati condivisi da tutti gli utenti dell'applicazione. Utilizzare lo stato di sessione per i valori specifici di ciascun utente e lo stato dell'applicazione per i dati globali, come contatori o configurazioni.

No. Ogni utente ottiene una sessione separata, identificata da un ID di sessione univoco memorizzato in un cookie. Un utente non puรฒ leggere i valori di sessione di un altro utente, motivo per cui la Sessione viene utilizzata per i dati specifici di ciascun utente.

Riassumi questo post con: