Zarządzanie sesjami ASP.NET [Przykład]

⚡ Inteligentne podsumowanie

Zarządzanie sesjami ASP.NET pozwala bezstanowej aplikacji HTTP zapamiętywać dane użytkownika w przypadku żądań. Wyjaśnia ViewState, obiekt sesji do przechowywania par klucz-wartość, przykład działania, tryby stanu sesji, konfigurację limitu czasu oraz zalety stanu sesji.

  • 🌐 HTTP bezstanowy: Protokół HTTP nie przechowuje danych pomiędzy żądaniami, dlatego ASP.NET dodaje mechanizmy służące do przechowywania stanu.
  • 🗂️. Stan widoku: ViewState automatycznie przenosi wartości kontrolek z jednej strony na następną.
  • 🔑 Obiekt sesji: Session[„Key”] przechowuje i pobiera pary klucz-wartość przez cały cykl życia aplikacji.
  • ⚙️ Tryby stanu: Stan sesji można przechowywać w procedurze InProc, na serwerze StateServer, w programie SQL Server lub w niestandardowym magazynie.
  • ⏱️. Przekroczenie limitu czasu: Parametr sessionState timeout w pliku web.config kontroluje, jak długo sesja pozostaje aktywna.

Samouczek zarządzania sesjami ASP.NET z przykładem

Zarządzanie sesjami ASP.NET

Protokół HTTP, na którym działają wszystkie aplikacje internetowe, jest protokołem bezstanowym. Słowo „bezpaństwowiec” oznacza po prostu, że informacje nie są zatrzymywane od jednego wniosku do drugiego.

Na przykład, jeśli masz stronę logowania, która ma 2 pola tekstowe, jedno na nazwę i drugie na hasło. Kiedy klikniesz przycisk Zaloguj na tej stronie, aplikacja musi upewnić się, że nazwa użytkownika i hasło zostaną przekazane na następną stronę.

W ASP.Net odbywa się to na wiele sposobów. Pierwszym z nich jest koncepcja o nazwie ViewState. W tym miejscu ASP.Net automatycznie zapisuje zawartość wszystkich kontrolek. Zapewnia również przekazanie jej do następnej strony. Odbywa się to za pośrednictwem właściwości o nazwie ViewState.

Nie jest idealnym rozwiązaniem, aby programista zmieniał cokolwiek w stanie widoku. Dzieje się tak, ponieważ powinien być obsługiwany tylko przez ASP.Net.

Obiekt sesji ASP.NET

Innym sposobem jest użycie obiektu zwanego „Obiektem sesji”. Obiekt Session jest dostępny przez cały cykl życia aplikacji. W obiekcie Session możesz przechowywać dowolną liczbę par klucz-wartość. Zatem na dowolnej stronie możesz zapisać wartość w obiekcie Session, korzystając z poniższego wiersza kodu.

Session["Key"] = value

Wartość jest przechowywana w obiekcie sesji, a część „klucz” służy do nadania wartości nazwy. Pozwala to na pobranie wartości w późniejszym czasie. Aby pobrać wartość, wystarczy użyć poniższego polecenia.

Session["Key"]

Przykład obiektu sesji ASP.NET

W naszym przykładzie użyjemy obiektu Session do zapisania imienia i nazwiska wpisanego w polu tekstowym „name” na stronie. Następnie pobierzemy tę wartość i wyświetlimy ją na stronie. Dodajmy poniższy kod do pliku Demo.aspx.cs.

Użyj obiektu sesji

protected void btnSubmit_Click(object sender, EventArgs e)
{
	Session["Name"] = txtName.Text;

	Response.Write(Session["Name"]);

	lblName.Visible = false;
	txtName.Visible = false;
	lstLocation.Visible = false;
	chkC.Visible = false;
	chkASP.Visible = false;
	rdMale.Visible = false;
	rdFemale.Visible = false;
	btnSubmit.Visible = false;
}

Code Wyjaśnienie:-

  1. Pierwszy wiersz kodu pobiera wartość kontrolki tekstowej „Name” i zapisuje ją w obiekcie „Session”. Określając kod „Session[„Name”]”, nadajemy właściwości nazwę „Name”. Określając nazwę właściwości, łatwiej jest ją później odnaleźć.
  2. Następny wiersz kodu pobiera przechowywaną wartość z obiektu Session. Następnie zapisuje tę wartość za pomocą metody „Response.Write” z powrotem do klienta.
  3. Na koniec ustawiamy wszystkie kontrolki w formularzu jako niewidoczne. Jeśli tego nie zrobimy, wszystkie kontrolki i wartości odpowiedzi będą wyświetlane razem.

Po wprowadzeniu powyższych zmian zobaczysz następujący wynik.

Wyjście:

Użyj obiektu sesji

Z danych wyjściowych wynika, że ​​wartość sesji name została pobrana i wyświetlona w przeglądarce.

Tryby stanu sesji ASP.NET

ASP.NET może przechowywać dane sesji w kilku miejscach, zwanych trybami stanu sesji. Wybrany tryb wpływa na wydajność, skalowalność oraz to, czy dane przetrwają restart aplikacji. Poniższa tabela porównuje te tryby:

Moda Gdzie przechowywany jest stan Najlepszy dla
InProc W pamięci serwera WWW (domyślnie) Aplikacje jednoserwerowe; najszybsze, ale tracone po ponownym uruchomieniu
Serwer stanowy Osobny proces usługi stanu ASP.NET Farmy internetowe; przetrwają ponowne uruchomienia aplikacji
Serwer SQL Baza danych SQL Server Farmy internetowe wymagające trwałego, skalowalnego stanu
warunki indywidualne Niestandardowy dostawca, którego wdrażasz Specjalistyczne sklepy takie jak Redis
poza Stan sesji wyłączony Aplikacje, które nie wymagają sesji

InProc jest rozwiązaniem domyślnym i najszybszym, ale w przypadku wdrożeń z równoważeniem obciążenia StateServer lub SQLServer utrzymuje dostępność sesji na wielu serwerach.

Jak skonfigurować limit czasu sesji w ASP.NET

Sesja nie trwa wiecznie; wygasa po okresie bezczynności. Limit czasu można ustawić w pliku web.config za pomocą elementu sessionState, gdzie wartość limitu czasu jest wyrażona w minutach:

<configuration>
  <system.web>
    <sessionState mode="InProc" timeout="20" />
  </system.web>
</configuration>

Można również ustawić to w kodzie za pomocą Session.Timeout = 30;Domyślny limit czasu wynosi 20 minut. Wybranie krótszego limitu czasu szybciej zwalnia pamięć serwera i poprawia bezpieczeństwo, a dłuższy limit czasu sprawia, że ​​użytkownicy pozostają zalogowani dłużej.

Zalety i wady stanu sesji

Stan sesji jest wygodny, ale ma swoje wady i zalety, które należy rozważyć przed podjęciem decyzji o jego intensywnym użytkowaniu.

Zalety:

  • Łatwy w użyciu do przechowywania danych dla każdego użytkownika, np. sklepuping koszyk lub dane logowania.
  • Można przechowywać złożone obiekty, nie tylko ciągi znaków.
  • Dane przechowywane są na serwerze, dlatego są bezpieczniejsze niż te przechowywane po stronie klienta.

Niedogodności:

  • Tryb InProc zużywa pamięć serwera i nie jest skalowalny w obrębie farmy internetowej.
  • Dane sesji zostają utracone w momencie upływu limitu czasu sesji lub ponownego uruchomienia aplikacji (w trybie InProc).
  • Przechowywanie dużych ilości danych przez jednego użytkownika może mieć negatywny wpływ na wydajność przy dużym obciążeniu.

FAQ

Tak. Asystenci AI mogą generować kod do przechowywania i odczytywania wartości sesji, sugerować właściwy tryb stanu i zapisywać ustawienia web.config. RevPrzejrzyj wygenerowany kod, aby upewnić się, że spełnia on Twoje potrzeby w zakresie skalowalności i bezpieczeństwa.

Tak. Narzędzia do przeglądu kodu oparte na sztucznej inteligencji mogą sygnalizować zagrożenia, takie jak fiksacja sesji, brakujące pliki cookie obsługujące tylko protokół HTTPS lub przechowywanie poufnych danych w sesji. Potraktuj te ustalenia jako wskazówki i potwierdź poprawki testami bezpieczeństwa przed wdrożeniem.

Stan sesji przechowuje dane dla sesji pojedynczego użytkownika, natomiast stan aplikacji przechowuje dane współdzielone przez wszystkich użytkowników aplikacji. Użyj stanu sesji dla wartości dla poszczególnych użytkowników, a stanu aplikacji dla danych globalnych, takich jak liczniki lub konfiguracja.

Nie. Każdy użytkownik otrzymuje osobną sesję, identyfikowaną za pomocą unikalnego identyfikatora sesji zapisanego w pliku cookie. Jeden użytkownik nie może odczytać wartości sesji innego użytkownika, dlatego do danych dla każdego użytkownika używa się terminu „sesja”.

Podsumuj ten post następująco: