Zarządzanie stanem aplikacji Mechanizm Sesji 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)
Konfiguracja na poziomie strony Konfiguracja na poziomie kontrolki 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;
Dostępna dla konkretnego użytkownika 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.
Domyślnie trzymany w cookie Konfiguracja w pliku web.config 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>
Wprowadzanie informacji Session[”NAZWA”] = Wartosc; 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"]; }
Session_OnEnd (działa w trybie InProc) 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["UsersOnline"] = (int)Application["UsersOnline"] - 1; </script>