Stan sesji, widoku i aplikacji

 

 

 

 

Cele ćwiczenia

 

(Na wszystkich stronach aplikacji ustaw atrybut strony Trace="true" albo śledzenie na poziomie aplikacji)

 

Operowanie na stanie sesji

 

Dodanie parametru sesji

 

Session.Add("nazwa", wartość);

Session["nazwa "] = wartość;

Odczytanie wartości parametru

Wartość = Session["nazwa"];

Usunięcie parametru

Session.Contents.Remove("nazwa");

Usunięcie wszystkich parametrów

Session.Contents.Clear();

 

Analogiczne instrukcje służą do operowania na stanie aplikacji (obiekt Application) i widoku (obiekt ViewState).

 

Przekazywanie identyfikatora sesji

  1. Utwórz nową witrynę w lokalnym systemie plików.
  2. Umieść na nowej stronie kontrolkę Button.
  3. Uruchom stronę znajdź w śladzie strony identyfikator sesji SessionID
  4. Kilkakrotnie kliknij przycisk i sprawdź ,czy identyfikator sesji się zmienia.
  5. Dodaj parametr sesji w obsłudze zdarzenia kliknięcia przycisku np. instrukcją Session.Add("nazwa", "wartość");.
  6. Kilkakrotnie kliknij przycisk i sprawdź ,czy identyfikator sesji się zmienia.
  7. Znajdź parametr sesji w stanie sesji umieszczonym w śladzie strony.
  8. W pliku konfiguracyjnym web.config pod znacznikiem <system.web> umieść kod z listingu 1, konfigurujący przekazywanie identyfikatora sesji jako części zmodyfikowanego adresu URL.

 

Listing 1. Kod konfigurujący przekazywanie identyfikatora sesji jako części zmodyfikowanego adresu URL

 

<sessionState

             cookieless="UseUri"

/>

 

  1. Uruchom stronę i znajdź identyfikator sesji w zmodyfikowanego adresu URL.
  2. Zmień atrybut cookieless na UseCookies.

 

Tworzenie obiektu sesji dostępnego z wielu stron aplikacji

 

  1. Dodaj do aplikacji plik  Global.asax.
  2. W funkcji Session_Start umieść kod z listingu 2 tworzący tabelę wypełnioną kontrolkami TextBox i zapisujący ją jako parametr sesji.

 

Listing 2. Kod tworzący tabelę wypełnioną kontrolkami TextBox i zapisujący ją jako parametr sesji

 

void Session_Start(object sender, EventArgs e)

{

    Table tabela1 = new Table();

    int i, k;

    for (i = 0; i < 3; i++)

    {

        TableRow wiersz = new TableRow();

        for (k = 0; k < 3; k++)

        {

            TableCell cela = new TableCell();

            wiersz.Cells.Add(cela);

            cela.Controls.Add(new TextBox());

        }

        tabela1.Rows.Add(wiersz);

    }

    Session.Add("tabela1", tabela1);

}

 

  1. Do witryny dodaj nową stronę, umieść na niej przycisk i w funkcji Page_Load kod dodania do formularza strony kontrolki typu Table, wskazanej przez parametr sesji o nazwie tabela1 , listing 3.

 

Listing 3. Kod dodania do formularza strony kontrolki typu Table, wskazanej przez parametr sesji o nazwie tabela1

 

    protected void Page_Load(object sender, EventArgs e)

    {

        Label1.Controls.Add((Table)Session["tabela1"]);

    }

 

  1. Uruchom stronę następnie wypełnij tabelę danymi i kliknij przycisk.
  2. W nowej zakładce lub nowej przeglądarce uruchom stronę w ramach tej samej sesji i zbadaj przekazywanie danych między stronami tej samej sesji.
  3. Uruchom stronę w ramach nowej sesji i zbadaj przekazywanie danych.

 

Zbieranie danych do obiektu sesji z wielu stron

 

  1. Dodaj do funkcji Session_Start kod tworzący tabelę do zbierania zamówień – listing 4

 

Listing 4. Kod tworzący tabelę zawierający wiersz nagłówka i zapisujący ją jako parametr sesji

 

    Table zamowienia = new Table();

    TableRow naglowek = new TableRow();

    TableCell kolumna = new TableCell();

    kolumna.BackColor = System.Drawing.Color.GreenYellow;

    kolumna.Text = "Nazwa towaru";

    naglowek.Cells.Add(kolumna);

    kolumna = new TableCell();

    kolumna.BackColor = System.Drawing.Color.GreenYellow;

    kolumna.Text = "Cena";

    naglowek.Cells.Add(kolumna);

    kolumna = new TableCell();

    kolumna.BackColor = System.Drawing.Color.GreenYellow;

    kolumna.Text = "Ilość";

    naglowek.Cells.Add(kolumna);

    kolumna.Font.Size = 16;

    zamowienia.Rows.Add(naglowek);

 

    Session.Add("zamowienia", zamowienia);

 

  1. Dodaj nową stronę, umieść na niej przycisk a w funkcji Page_Load umieść kod dodania do formularza strony kontrolki typu Table, wskazanej przez parametr sesji o nazwie zamowienia.
  2. Dodaj do strony kontrolki testowe do wprowadzania danych i funkcję obsługi kliknięcia przycisku dodajacą do tabeli wiersz zawierajacy dane umieszczone w kontrolkach tekstowych.
  3. Uruchom stronę przetestuj jej działanie, dodaj nowe wiersze do tabeli.
  4. W nowej zakładce lub nowej przeglądarce uruchom stronę w ramach tej samej sesji i zbadaj przekazywanie danych między stronami tej samej sesji.
  5. Uruchom stronę w ramach nowej sesji i zbadaj przekazywanie danych.

 

Licznik na stronie

  1. Wykorzystując stan widoku ViewState umieścić na nowej stronie licznik przeładowań strony.

 

Listing 5. Kod licznika przeładowań strony

 

        if (ViewState["licznik"] == null)

            ViewState["licznik"] = 1;

        else

            ViewState["licznik"] = (int)ViewState["licznik"] + 1;

 

  1. Przetestuj działanie licznika.

 

Licznik sesji

  1. Wykorzystując stan aplikacji Application zrealizuj licznik otwartych sesji.
  2. Przetestuj działanie licznika.

 

Zapis zdarzeń sesji i aplikacji do pliku tekstowego

  1. Dodaj do aplikacji rejestrację w pliku zdarzeń aplikacji i sesji.
  2. Do rejestracji zdarzeń może być pomocna funkcja z listingu 6.

 

Listing 6. Kod funkcji dopisującej do pliku log.txt komunikaty

 

void wpis(string komunikat)

{  

    System.IO.StreamWriter plik = new System.IO.StreamWriter(@"C:\log\log.txt", true);

    plik.WriteLine(komunikat + DateTime.Now.ToString());

    plik.Close();

}

 

  1. Przetestuj działanie, zapoznaj się z wpisami do pliku log.txt.
  2. Dodaj do aplikacji stronę wyświetlającą zawartość plik dziennika.

Listing 7. Kod umieszczający zawartość pliku etykiecie

 

System.IO.StreamReader plik = new System.IO.StreamReader(@"C:\log\log.txt");

string tekst = plik.ReadToEnd();

//TextBox1.Text = tekst;

Label1.Text = tekst;

plik.Close();

 

Projekt

  1. Zbieranie zamówień.
  2. Rejestracja zdarzeń sesji i aplikacji.