2012-03-08 6 views
11

Ho un progetto asp.net con codice C# dietro. Ho una classe statica chiamata GlobalVariable in cui memorizzo alcune informazioni, come ad esempio il prodotto attualmente selezionato.Variabile sessione Asp.net

Tuttavia, ho visto che quando ci sono due utenti che utilizzano il sito Web, se uno cambia il prodotto selezionato, se lo cambia per tutti. Le variabili statiche sembrano essere comuni a tutti.

Vorrei creare (dal codice C#) una sorta di variabile di sessione utilizzata solo dal codice C#, ma non solo dalla pagina, ma da qualsiasi classe.

+0

variabili statiche sono accessibili in tutta l'applicazione. Le sessioni vengono utilizzate per memorizzare e accedere alle variabili all'interno di un accesso utente e di un logout. Utilizzare un database per far sopravvivere le variabili alle sessioni e all'applicazione. Per condividere i dati tra più applicazioni, utilizzare una cache distribuita e archiviare la [sessione ASP.NET] (http://www.alachisoft.com/ncache/session-index.html) in una cache. –

risposta

22

Sì, le variabili statiche sono condivise dall'intera applicazione, non sono in alcun modo private all'utente/sessione.

Per accedere all'oggetto Session da una classe non di pagina, è necessario utilizzare HttpContext.Current.Session.

+0

Wow, così semplice ^^ Grazie. – Amaranth

+3

@Mathieu Ricordarsi di verificare null, poiché la sessione non verrà sempre creata per ogni richiesta. Ad esempio, semplici gestori, come i file .ashx, non sono configurati di default per creare l'oggetto Session. –

+0

Apropos, http://stackoverflow.com/questions/1382791/asp-net-what-to-do-if-current-session-is-null/1382811#1382811 – driis

8

GlobalVariable è un nome fuorviante. Qualunque cosa si chiami, non dovrebbe essere static se è per sessione. Si può fare qualcosa di simile a questo, invece:

// store the selected product 
this.Session["CurrentProductId"] = productId; 

Non si dovrebbe cercare di fare la raccolta Session globalmente accessibile sia. Piuttosto, passa solo i dati di cui hai bisogno e ottieni/imposta usando Session dove appropriato.

Ecco una panoramica su come lavorare con session storage in ASP .NET su MSDN.

+0

Grazie per aver fornito un esempio di come utilizzare Session . – Ernest

7

Hai risposto alla tua stessa domanda. Una risposta è in variabili di sessione. Nella classe GlobalVariable, puoi inserire proprietà che sono supportate da variabili di sessione.

Esempio:

public string SelectedProductName 
{ 
    get { return (string)Session["SelectedProductName"]; } 
    set { Session["SelectedProductName"] = value; } 
}