Stan sesji, widoku i aplikacji
Cele ćwiczenia
- Zapoznanie z aplikacjami ASP.NET serwera WWW .
- Zapoznanie z sesjami ASP.NET serwera WWW.
- Zapoznanie ze stanem widoku strony.
- Zapoznanie z konfiguracją aplikacji i sesji ASP.NET.
- Zapoznanie ze sposobami dodawania oraz wykorzystania
parametrów sesji aplikacji i widoku.
(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
- Utwórz nową witrynę w lokalnym
systemie plików.
- Umieść na nowej stronie
kontrolkę Button.
- Uruchom stronę znajdź w śladzie
strony identyfikator sesji SessionID
- Kilkakrotnie kliknij przycisk i
sprawdź ,czy identyfikator sesji się zmienia.
- Dodaj parametr sesji w obsłudze
zdarzenia kliknięcia przycisku np. instrukcją Session.Add("nazwa",
"wartość");.
- Kilkakrotnie kliknij przycisk i
sprawdź ,czy identyfikator sesji się zmienia.
- Znajdź parametr sesji w stanie
sesji umieszczonym w śladzie strony.
- 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"
/>
- Uruchom stronę i znajdź
identyfikator sesji w zmodyfikowanego adresu URL.
- Zmień atrybut cookieless na UseCookies.
Tworzenie obiektu sesji dostępnego z wielu stron
aplikacji
- Dodaj do aplikacji plik Global.asax.
- 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);
}
- 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"]);
}
- Uruchom stronę następnie wypełnij
tabelę danymi i kliknij przycisk.
- 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.
- Uruchom stronę w ramach nowej
sesji i zbadaj przekazywanie danych.
Zbieranie danych do obiektu sesji z wielu stron
- 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);
- 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.
- 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.
- Uruchom stronę przetestuj jej
działanie, dodaj nowe wiersze do tabeli.
- 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.
- Uruchom stronę w ramach nowej
sesji i zbadaj przekazywanie danych.
Licznik na stronie
- 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;
- Przetestuj działanie licznika.
Licznik sesji
- Wykorzystując stan aplikacji Application zrealizuj licznik otwartych
sesji.
- Przetestuj działanie licznika.
Zapis zdarzeń sesji i aplikacji do pliku
tekstowego
- Dodaj do aplikacji rejestrację
w pliku zdarzeń aplikacji i sesji.
- 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();
}
- Przetestuj działanie, zapoznaj
się z wpisami do pliku log.txt.
- 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
- Zbieranie zamówień.
- Rejestracja zdarzeń sesji i
aplikacji.