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.
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.
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:-
- 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źć.
- Następny wiersz kodu pobiera przechowywaną wartość z obiektu Session. Następnie zapisuje tę wartość za pomocą metody „Response.Write” z powrotem do klienta.
- 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:
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.



