Dlaczego miałby ASP.NET MVC używa stanu sesji?

Zalecane przez ASP.NET zespół aby używać pamięci podręcznej zamiast sesji, w ciągu ostatnich kilku lat przestaliśmy używać sesji z modelem formularza internetowego. Więc normalnie mamy sesję wyłączoną w sieci.config

<sessionState mode="Off" />

Ale teraz, kiedy testuję ASP.NET aplikacja MVC z tym ustawieniem wyrzuca błąd w klasie SessionStateTempDataProvider wewnątrz frameworka mvc, poprosiła mnie o włączenie stanu sesji, zrobiłem to i zadziałało. Patrząc na źródło używa sesji:

// line 20 in SessionStateTempDataProvider.cs
Dictionary<string, object> tempDataDictionary = 
httpContext.Session[TempDataSessionStateKey] as Dictionary<string, object>; 

Więc dlaczego używają sesji tutaj? Co przegapiłem?

========================================================

Edit Sorry nie chodziło mi o to, żeby ten post debatował na session vs. cache, ale raczej w kontekście ASP.NET MVC, zastanawiałem się tylko, dlaczego session jest używany tutaj. W tym blogu również Scott Watermasysk wspomniał, że wyłączenie sesji jest dobrą praktyką, więc zastanawiam się tylko, dlaczego muszę go włączyć, aby używać MVC od teraz.

Author: edymtt, 2008-12-22

4 answers

Sesja jest używana do przechowywania TempData. TempData jest bardzo ograniczoną formą stanu sesji, która będzie trwać tylko do następnego żądania od określonego użytkownika. ( Edit w MVC 2+ trwa do następnego odczytu.) Celem TempData jest przechowywanie danych, a następnie wykonanie przekierowania i udostępnienie przechowywanych danych akcji, do której właśnie Przekierowano.

Użycie sesji dla magazynu TempData oznacza, że każdy rozproszony system buforowania, który już obsługuje sesję, będzie działał dla TempData. Unikanie korzystania z sesji bezpośrednio, gdy TempData zrobi ma kilka zalet. Jednym z nich jest to, że nie musisz samodzielnie czyścić sesji; TempData sama "wygaśnie".

 33
Author: Craig Stuntz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-07 03:11:56

Zalecane przez ASP.NET team to use cache zamiast Sesji

@Ray247, mógłbyś podać odniesienie do tego? Sesja i pamięć podręczna różnią się ze względu na charakter i powinny być używane w zależności od wymagań aplikacji. Na przykład przechowywanie danych użytkownika w pamięci podręcznej może prowadzić do niepożądanego zachowania. Oczywiście, jeśli naprawdę chcesz uniknąć używania sesji, możesz dostarczyć własną implementację interfejsu ITempDataProvider .
 13
Author: Darin Dimitrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-22 19:56:01

Hmm... Być może czytałeś o utrzymywaniu się ciężkich obiektów lub stosunkowo rzadko dostępnych obiektów - zdecydowanie lepiej umieścić je w pamięci podręcznej, ale dla lekkich obiektów lub danych, które są wymagane przy każdym żądaniu, nie ma lepszej techniki niż umieszczenie ich w sesji.

Sesje nie są złe, jeśli używasz ich poprawnie.

 6
Author: maxnk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-22 19:54:28

Tylko dodatkowa myśl. TempData ma swój własny cel i MS wiedział, że będzie inna szkoła myśli w odniesieniu do mechanizmu trwałego TempData. Tak więc domyślnie ustawili stały sklep na SessionState. Ale projekt jest nadal bardzo elastyczny. W oparciu o potrzeby projektu i zarządzanie, które nim kieruje, możesz utworzyć własnego dostawcę tempdata, aby dopasować go do konkretnych wymagań.

Oto kilka wskazówek do zasoby TempData

Oto kilka dodatkowych usprawnień w implementacji TempData Ulepszenia TempData

Oto alternatywna implementacja wykorzystująca ms Velocity Distributed Caching. Velocity TempData Provider

 3
Author: rajesh pillai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-17 05:18:33