Jestem nowy w ASP.NET MVC. Wcześniej używałem PHP i łatwo było utworzyć sesję i wybrać rekordy użytkowników na podstawie aktualnych zmiennych sesji.
Szukałem wszędzie w Internecie prostego samouczka krok po kroku, który może pokazać mi, jak tworzyć i używać sesji w mojej aplikacji C # ASP.NET MVC 4. Chcę utworzyć sesję ze zmiennymi użytkownika, do których mam dostęp z dowolnego miejsca na moich kontrolerach i móc używać zmiennych w zapytaniach LINQ.
asp.net-mvc
session
asp.net-mvc-4
session-variables
Thuto Paul Gaotingwe
źródło
źródło
Odpowiedzi:
Próbować
źródło
WebSecurity.CurrentUserId
aby nie pobierać jej wielokrotnie z bazy danych (stwierdziłem, że jest to bardzo kosztowne)?Account/LogOn
doHome/Index
,Session["FirstName"]
jestnull
. Programiści muszą utworzyć kontroler nadrzędny (BaseController
) i zdefiniować chronione pole (internal protected HttpSessionStateBase SharedSession
), które może ujawnić współdzieloną zmienną sesji we wszystkich kontrolerach podrzędnych (przy założeniu, że wszystkie kontrolery aplikacji dziedziczą poBaseController
)Ze względu na bezstanowy charakter sieci, sesje są również niezwykle użytecznym sposobem utrwalania obiektów w żądaniach poprzez ich serializację i przechowywanie w sesji.
Idealnym przypadkiem użycia może być to, że potrzebujesz dostępu do regularnych informacji w całej aplikacji, aby zapisać dodatkowe wywołania bazy danych przy każdym żądaniu, dane te mogą być przechowywane w obiekcie i nieserializowane przy każdym żądaniu, na przykład:
Nasz obiekt wielokrotnego użytku, możliwy do serializacji:
Przypadek użycia:
Po zserializowaniu tego obiektu możemy go używać na wszystkich kontrolerach bez konieczności tworzenia go lub ponownego wyszukiwania w bazie danych zawartych w nim danych.
Wstrzyknij obiekt sesji za pomocą Dependency Injection
W idealnym świecie `` zaprogramowałbyś interfejs, a nie implementację '' i wstrzyknął swój serializowalny obiekt sesji do kontrolera przy użyciu wybranego kontenera Inversion of Control (w tym przykładzie zastosowano StructureMap, ponieważ jest to ten, który najlepiej znam ).
Następnie zarejestrujesz to w swoim
Global.asax.cs
pliku.Dla tych, którzy nie są zaznajomieni z wstrzykiwaniem obiektów sesji, możesz znaleźć bardziej szczegółowy wpis na blogu na ten temat tutaj .
Słowo ostrzeżenia:
Warto zauważyć, że sesje powinny być ograniczone do minimum, duże sesje mogą zacząć powodować problemy z wydajnością.
Zaleca się również, aby nie przechowywać w nich żadnych wrażliwych danych (haseł itp.).
źródło
Oto jak działa stan sesji w ASP.NET i ASP.NET MVC:
Omówienie stanu sesji ASP.NET
Zasadniczo robisz to, aby zapisać wartość w obiekcie Session:
Aby pobrać wartość:
źródło
Account
doHome
, sesja ["FirstName"] ma wartość null. Programiści muszą utworzyćBaseController
i zdefiniować chronione pole (internal protected HttpSessionStateBase SharedSession
), które może ujawniać wspólnąSession
zmienną we wszystkich kontrolerach podrzędnych (przy założeniu, że wszystkie kontrolery aplikacji dziedziczą poBaseController
)Możesz przechowywać dowolne dane w sesji za pomocą:
Ta zmienna będzie trwać około 20 minut.
źródło
U może przechowywać dowolną wartość w sesji, na przykład Session ["FirstName"] = FirstNameTextBox.Text; ale zasugeruję, abyś wziął jako pole statyczne w modelu przypisując mu wartość i możesz uzyskać dostęp do tej wartości pola w dowolnym miejscu w aplikacji. Nie potrzebujesz sesji. należy unikać sesji.
na kontrolerze - Employee.FullName = "ABC"; Teraz możesz uzyskać dostęp do tej pełnej nazwy w dowolnym miejscu aplikacji.
źródło