Wykład 5

advertisement
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>
Download