2012-03-08 12 views
11

Mam projekt asp.net z C# kod za. Mam klasę statyczną o nazwie GlobalVariable, w której przechowuję pewne informacje, na przykład aktualnie wybrany produkt.Zmienna sesji Asp.net

Jednak widziałem, że gdy dwóch użytkowników korzysta ze strony internetowej, jeśli zmieni się wybrany produkt, jeśli zmieni go dla wszystkich. Zmienne statyczne wydają się wspólne dla wszystkich.

Chciałbym utworzyć (z kodu C#) pewną zmienną sesji używaną tylko z kodu C#, ale nie tylko ze strony, ale z dowolnej klasy.

+0

Zmienne statyczne są dostępne w całej aplikacji. Sesje są używane do przechowywania i dostępu do zmiennych w logowaniu użytkownika i wylogowaniu. Użyj bazy danych, aby Twoje zmienne przeżyły Twoje sesje i aplikację. Aby udostępnić dane między wieloma aplikacjami, użyj rozproszonej pamięci podręcznej i przechowuj swoją [ASP.NET Session] (http://www.alachisoft.com/ncache/session-index.html) w pamięci podręcznej. –

Odpowiedz

22

Tak zmienne statyczne są udostępniane przez całą aplikację, w żaden sposób nie są prywatne dla użytkownika/sesji.

Aby uzyskać dostęp do obiektu Session z klasy innej niż strona, należy użyć HttpContext.Current.Session.

+0

Wow, tak prosty ^^ Dziękuję. – Amaranth

+3

@Mathieu Pamiętaj, aby sprawdzić wartość zerową, ponieważ sesja nie zawsze będzie tworzona dla każdego żądania. Na przykład proste procedury obsługi, takie jak pliki .ashx, nie są domyślnie instalowane w celu utworzenia obiektu Session. –

+0

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

8

GlobalVariable to nazwa wprowadzająca w błąd. Cokolwiek to się nazywa, nie powinno być static, jeśli jest to sesja. Można zrobić coś takiego zamiast:

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

Nie należy starać się kolekcja Session dostępny globalnie albo. Zamiast tego przekazuj tylko potrzebne dane i pobierz/ustaw, używając w razie potrzeby numeru Session.

Oto przegląd pracy z session storage in ASP .NET na MSDN.

+0

Dziękujemy za przedstawienie przykładu użycia sesji . – Ernest

7

Odpowiedziałeś na własne pytanie. Odpowiedź znajduje się w zmiennych sesji. W swojej klasie GlobalVariable możesz umieszczać właściwości, które są wspierane przez zmienne sesji.

Przykład:

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