2012-07-10 7 views
6

Jestem całkiem nowe do rozwoju sieci i ASP.NET ale zastanawiałem się następujące pytanie:Statyczna interferencja zmiennych ASP.net?

Gdybym zadeklarować zmienną statyczną na stronie internetowej i kilka użytkownicy mają dostęp do tej samej strony jednocześnie. Czy ta statyczna zmienna jest unikalna dla każdego użytkownika, czy może przeszkadzać różnym użytkownikom?

Dzięki

Odpowiedz

7

Tak, będzie to kolidować między użytkownikami, a między jednoczesnych żądań przez jednego użytkownika. Unikaj pól statycznych w ASP.NET (i większości innych programów), chyba że jesteś bardzo pewien, co robisz.

Należy rozważyć użycie stanu sesji dla tego, co tu robisz, lub coś w ramach samego żądania (dane formularza, plik cookie itp.).

2

Czy ta statyczna zmienna unikalny dla każdego użytkownika

nr

będzie kolidować z innymi użytkownikami?

Tak.

co chcesz używać innego czynnika trwałości, jak stan sesji caching itp

Niektórzy ludzie użyć atrybutu [ThreadStatic] na polach w ASP.NET tak, że jest unikalny dla każdego użytkownika, ale to Niebezpieczne i nie powinno się tego robić. Unikaj tego za wszelką cenę. Podnoszę to tylko na wypadek, gdyby ktoś inny to zalecił.

+0

Ponownie edytuj; rzeczą, o której warto wspomnieć o '[ThreadStatic]' jest to, że ASP.NET może przetwarzać różne kroki zapytania ** na różnych wątkach * - co może prowadzić do bardzo dziwnego zachowania z '[ThreadStatic]' –

+0

@MarcGravell tak, to jest dlaczego zdecydowanie odradzam korzystanie z niego. Nie ma gwarancji, że ASP.NET zakończy żądanie w tym samym wątku, w którym rozpoczął. Zwłaszcza z C# 5/MVC4 po drodze, uniemożliwiłoby skorzystanie z nowego async/czekania. – vcsjones