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 <%@ Page Language="C#" ... CodeFile="Default2.aspx.cs" ..." EnableViewState="True" %> • Konfiguracja na poziomie kontrolki <asp:TextBox ID="TextBox1" runat="server" EnableViewState="False"></asp:TextBox> ViewState cd. Property ViewState • Właściwość obiektu (kontrolki) protected virtual StateBag ViewState { get; } • Wykorzystanie w funkcjach składowych 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 <configuration> <system.web> <sessionState cookieless="true" regenerateExpiredSessionId="true" /> </system.web> </configuration> • Implementacja sesji bez cookie 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: Application["Message"] = "Welcome to the Contoso site."; Application["PageRequestCount"] = 0; Application.Lock(); Application["PageRequestCount"] = ((int)Application["PageRequestCount"])+1; Application.UnLock(); • Odczyt: 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>