Aplikacje sieciowe
Zarządzanie stanem aplikacji Mechanizm Sesji
Zmienne Application i Session
Sposoby wymiany informacji miedzy poszczególnymi żądaniami
• Parametry żądania (ograniczenia związane z bezpieczeństwem i ilością przesyłanych informacji
• Cokies
• Stan Strony (ViewState)
• Stan aplikacji (zmienna Application)
• Stan sesji (zmienna Session)
ViewState
• Wykorzystywane do zapamiętania stanu kontrolek pomiędzy kolejnymi
wywołaniami strony
• Konfiguracja na poziomie strony
• Konfiguracja na poziomie kontrolki
<%@ Page Language="C#" ... CodeFile="Default2.aspx.cs" ..." EnableViewState="True" %>
<asp:TextBox ID="TextBox1" runat="server" EnableViewState="False"></asp:TextBox>
ViewState cd. Property ViewState
• Właściwość obiektu (kontrolki)
• Wykorzystanie w funkcjach składowych
protected virtual StateBag ViewState { get; }
this.ViewState["Text"];
this.ViewState["Text"] = value;
Sesja
• Dostępna dla konkretnego użytkownika
• Tworzona przy pierwszym żądaniu użytkownika
• Pomiędzy stronami przesyłany jest identyfikator sesji
– Stan sesji pamiętany jest na serwerze 1) w procesie serwera,
2) w zewnętrznym procesie, 3) w bazie danych MS SQL,
4) z wykorzystaniem własnej implementacji
dziedzicząc od klasy: SessionStateStoreProviderBase.
Identyfikator sesji
• Domyślnie trzymany w cookie
• Konfiguracja w pliku web.config
• Implementacja sesji bez cookie
<configuration>
<system.web>
<sessionState cookieless="true"
regenerateExpiredSessionId="true" />
</system.web>
</configuration>
http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx
Konfiguracja trybu pracy mechanizmu sesji
• InState – w pamięci serwera web
• StateServer – w zewnętrnym procesie
• SQLServer – serwer MS SQL
• Custom – własna implementacja
• Off – wyłączenie mechanizmu sesji
<configuration>
<system.web>
<sessionState mode="StateServer„
stateConnectionString="tcpip=SampleStateServer:42424"
cookieless="false"
timeout="20"/>
</system.web>
</configuration>
Zmienna Session
• Wprowadzanie informacji
Session[”NAZWA”] = Wartosc;
• Odczyt informacji
zmienna = (TYP) Session[”NAZWA”] ;
• Przykład:
Session[”Komunikat”] = ”Brak danych”;
String s= (String) Session[”Komunikat”] ;
Stan aplikacji
• Dostępny dla wszystkich użytkowników,
• Szybki dostęp do zmiennych trzymanych w pamięci procesu aplikacji,
• Wrażliwy na restart aplikacji (np. Przy zmianie pliku web.config),
• Nie jest współdzielony pomiędzy różnymi
instancjami aplikacji (w przypadku farmy serwerów, czy kolejnych instacji na jednym serwerze),
• Może być wykorzystywany przez wiele wątków aplikacji. Należy stosować metody Lock i UnLock.
Wykorzystanie zmiennej Application
Zapis:
• Odczyt:
Application["Message"] = "Welcome to the Contoso site.";
Application["PageRequestCount"] = 0;
Application.Lock();
Application["PageRequestCount"] = ((int)Application["PageRequestCount"])+1;
Application.UnLock();
if (Application["AppStartTime"] != null) { DateTime myAppStartTime =
(DateTime)Application["AppStartTime"]; }
Zdarzenia
• Session_OnStart
• Session_OnEnd (działa w trybie InProc)
<script language="C#" runat="server">
public void Application_OnStart() { Application["UsersOnline"] = 0;
}
public void Session_OnStart() { Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
Application.UnLock();
}
public void Session_OnEnd() { Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
Application.UnLock();
}
</script>