Obiekt sesji ASP
Obiekt Session przechowuje informacje o lub zmienia ustawienia sesji użytkownika.
Obiekt sesji
Kiedy pracujesz z aplikacją na swoim komputerze, otwierasz ją, wprowadzasz zmiany, a następnie ją zamykasz. To jest jak sesja. Komputer wie, kim jesteś. Wie, kiedy otwierasz aplikację, a kiedy ją zamykasz. Jednak w Internecie jest jeden problem: serwer WWW nie wie kim jesteś i co robisz, ponieważ adres HTTP nie utrzymuje stanu.
ASP rozwiązuje ten problem, tworząc unikalny plik cookie dla każdego użytkownika. Plik cookie jest wysyłany do komputera użytkownika i zawiera informacje identyfikujące użytkownika. Ten interfejs nazywa się obiektem Session.
Obiekt Session przechowuje informacje o lub zmiany ustawień sesji użytkownika.
Zmienne przechowywane w obiekcie Session zawierają informacje o jednym użytkowniku i są dostępne dla wszystkich stron w jednej aplikacji. Typowe informacje przechowywane w zmiennych sesji to nazwa, identyfikator i preferencje. Serwer tworzy nowy obiekt Session dla każdego nowego użytkownika i niszczy obiekt Session po wygaśnięciu sesji.
Kiedy zaczyna się sesja?
Sesja rozpoczyna się, gdy:
- Nowy użytkownik żąda pliku ASP, a plik Global.asa zawiera procedurę Session_OnStart
- Wartość jest przechowywana w zmiennej sesji
- Użytkownik żąda pliku ASP, a plik Global.asa używa tagu <object> do utworzenia wystąpienia obiektu o zakresie sesji
Kiedy kończy się sesja?
Sesja kończy się, jeśli użytkownik nie zażądał ani nie odświeżył strony w aplikacji przez określony czas. Domyślnie jest to 20 minut.
Jeśli chcesz ustawić interwał limitu czasu, który jest krótszy lub dłuższy niż domyślny, użyj właściwości Timeout .
Poniższy przykład ustawia interwał limitu czasu wynoszący 5 minut:
<%
Session.Timeout=5
%>
Użyj metody Abandon , aby natychmiast zakończyć sesję:
<%
Session.Abandon
%>
Uwaga: Głównym problemem z sesjami jest KIEDY powinny się kończyć. Nie wiemy, czy ostatnia prośba użytkownika była ostateczna, czy nie. Nie wiemy więc, jak długo powinniśmy utrzymać sesję „żywą”. Zbyt długie oczekiwanie na bezczynną sesję zużywa zasoby na serwerze, ale jeśli sesja zostanie usunięta zbyt wcześnie, użytkownik musi zacząć wszystko od nowa, ponieważ serwer usunął wszystkie informacje. Znalezienie odpowiedniego przedziału czasu może być trudne!
Wskazówka: w zmiennych sesji przechowuj tylko MAŁE ilości danych!
Przechowuj i pobieraj zmienne sesji
Najważniejszą rzeczą w obiekcie Session jest możliwość przechowywania w nim zmiennych.
Poniższy przykład ustawi nazwę użytkownika zmiennej sesji na „Kaczor Donald”, a wiek zmiennej sesji na „50”:
<%
Session("username")="Donald Duck"
Session("age")=50
%>
Gdy wartość jest przechowywana w zmiennej sesji, można ją uzyskać z DOWOLNEJ strony w aplikacji ASP:
Welcome <%Response.Write(Session("username"))%>
Powyższy wiersz zwraca: „Witamy Kaczora Donalda”.
Możesz również przechowywać preferencje użytkownika w obiekcie sesji, a następnie uzyskać dostęp do tych preferencji, aby wybrać stronę, która ma powrócić do użytkownika.
Poniższy przykład określa wersję strony tylko tekstową, jeśli użytkownik ma niską rozdzielczość ekranu:
<%If Session("screenres")="low" Then%>
This is the text version of the page
<%Else%>
This is the multimedia version of the page
<%End If%>
Usuń zmienne sesji
Kolekcja Contents zawiera wszystkie zmienne sesji.
Istnieje możliwość usunięcia zmiennej sesyjnej metodą Remove.
Poniższy przykład usuwa zmienną sesji „sale”, jeśli wartość zmiennej sesji „age” jest mniejsza niż 18:
<%
If Session.Contents("age")<18 then
Session.Contents.Remove("sale")
End If
%>
Aby usunąć wszystkie zmienne w sesji, użyj metody RemoveAll:
<%
Session.Contents.RemoveAll()
%>
Przeglądanie kolekcji zawartości
Kolekcja Contents zawiera wszystkie zmienne sesji. Możesz przeglądać kolekcję Contents w pętli, aby zobaczyć, co jest w niej przechowywane:
<%
Session("username")="Donald Duck"
Session("age")=50
dim i
For Each i in Session.Contents
Response.Write(i & "<br>")
Next
%>
Wynik:
username
age
Jeśli nie znasz liczby elementów w kolekcji Contents, możesz użyć właściwości Count:
<%
dim i
dim j
j=Session.Contents.Count
Response.Write("Session variables: " & j)
For i=1 to j
Response.Write(Session.Contents(i) & "<br>")
Next
%>
Wynik:
Session variables: 2
Donald Duck
50
Przeprowadź pętlę przez kolekcję StaticObjects
Możesz zapętlić kolekcję StaticObjects, aby zobaczyć wartości wszystkich obiektów przechowywanych w obiekcie Session:
<%
dim i
For Each i in Session.StaticObjects
Response.Write(i & "<br>")
Next
%>