Pliki cookies – ciasteczka

 

 

 

 

Cele ćwiczenia

 

 (Na wszystkich stronach aplikacji ustaw atrybut strony Trace="true")

 

Utworzenie i wysyłanie ciasteczka

Tradycyjne

Response.Cookies["userName"].Value = "Andrzej";
Response.Cookies["userName"].Expires = DateTime.Now.AddDays(1);

Obiektowe

HttpCookie aCookie = new HttpCookie("lastVisit");

aCookie.Value = DateTime.Now.ToString();

aCookie.Expires = DateTime.Now.AddDays(1);

Response.Cookies.Add(aCookie);

 

Właściwości ciasteczka

Name – nazwa ciasteczka,

Value – wartość,

Expires – data ważności,

Domain – rozszerza zasięg ciasteczka do domeny,

Path – zawęża zasięg ciasteczka do aplikacji,

Values – kolekcja parametrów klucz-wartość,

HasKeys – informuje czy ciasteczko zawiera kolekcję wartości.

 

Wysyłanie ciasteczek do przeglądarki

  1. Utwórz nową witrynę w lokalnym systemie plików.
  2. Na nowej stronie umieść

                                                              i.      nazwy,

                                                            ii.      wartości,

                                                          iii.      okresu ważności w minutach,

  1. W kodzie obsługi zdarzenia kliknięcia przycisku umieść kod wysyłający do przeglądarki ciasteczko o danych pobranych z kontrolek tekstowych; w zadaniu może być przydatny kod z listingu 1.

 

Listing 1. Kod wysłania do przeglądarki dwóch ciasteczek, ciasteczko kukiz1 ma termin ważności 20 minut, ciasteczko kukiz2 jest ciasteczkiem sesyjnym bez terminu ważności i jest usuwane po wyłączeniu przeglądarki.

 

        HttpCookie kuk = new HttpCookie("kukiz1", "Ala ma kota");

        kuk.Expires = DateTime.Now.AddMinutes(20);

        Response.Cookies.Add(kuk);

        Response.Cookies.Add(new HttpCookie("kukiz2", "kot ma Alę"));

 

  1. Uruchom stronę, kliknij przycisk i znajdź w śladzie strony wysłane ciasteczka.
  2. Ponownie kliknij przycisk i znajdź w śladzie strony wysłane i odebrane ciasteczka.
  3. Zamknij przeglądarkę.
  4. Do strony dodaj link do niej samej.
  5. Ponownie uruchom stronę i znajdź w śladzie strony odebrane ciasteczka.
  6. Kliknij przycisk i znajdź w śladzie strony wysłane i odebrane ciasteczka.
  7. Kliknij link i znajdź w śladzie strony wysłane i odebrane ciasteczka.
  8. Znajdź plik ciasteczka.

 

Przeglądarka zapisuje ciasteczka na komputerze klienckim w formie plików tekstowym w odpowiednim katalogu. Przeglądarka Internet Explorer zapisuje pliki ciasteczek

Katalog zawierający pliki ciasteczek jest katalogiem systemowym i zazwyczaj nie jest widoczny w Eksploratorze Windows. Aby zobaczyć zawartość katalogu ciasteczek należy ustawić odpowiednie opcje folderów

Do ukrytego katalogu Cookies można się dostać wpisując jawnie pełną ścieżkę dostępu do katalogu w pasku adresu Eksploratora Windows.

Nazwa ciasteczka ma format: user@serwer, gdzie: user = nazwa_użytkownika, serwer = nazwa_serwera

 

  1. Otwórz plik i zapoznaj się z zawartością.

 

Odczytanie ciasteczka przez serwer

  1. Dodaj do witryny stronę odczytującą ciasteczko o nazwie wpisanej do kontrolki tekstowej i umieszczające jego wartość jako tekst w etykiecie Label1– listing 2.

 

Listing 2. Kod odczytujący ciasteczko o nazwie pobranej z kontrolki tekstowej i umieszczający jego wartość jako tekst w etykiecie Label1.

 

string nazwaCiacha = TextBox1.Text;

 

if (Request.Cookies[nazwaCiacha] != null)

  Label1.Text = "Wartość = \"" + Request.Cookies[nazwaCiacha].Value +"\".";

else

  Label1.Text = "Nie otrzymano ciasteczka o podanej nazwie.";

 

  1. Uruchom stronę odczytaj przekazaną przez ciasteczko wartość.

 

Licznik odwiedzin

  1. Dodaj do strony licznik odwiedzin strony przez użytkownika przeglądarki – listing 3

 

Listing 3. Kod realizujący funkcje licznika odwiedzin strony przez użytkownika przeglądarki

 

int licznik;

if (Request.Cookies["licznik"] == null)

    licznik = 0;

else

    licznik = int.Parse(Request.Cookies["licznik"].Value);

 

licznik++;

 

Response.Cookies["licznik"].Value = licznik.ToString();

Response.Cookies["licznik"].Expires = DateTime.Now.AddDays(1);

 

Label1.Text = licznik.ToString();

 

  1. Uruchom stronę i przetestuj działanie licznika.

 

Zapisywanie w ciasteczku zbioru wartości

  1. Dodaj nową stronę, która zawiera kontrolki do wprowadzenia nazwiska i imienia użytkownika oraz przycisk wysyłający ciasteczko ważne 1 dzień zawierające wprowadzone dane – kod z listingu 4 może być pomocny przy wykonaniu polecenia.

 

Listing 4. Kod wysłania ciasteczka zawierającego zbiór wartości – danych o użytkowniku

 

Response.Cookies["userInfo"]["Nazwisko"] = "Kowalski";

Response.Cookies["userInfo"]["Imię"] = "Jan";

Response.Cookies["userInfo"]["Ostatnia wizyta"] = DateTime.Now.ToString();

Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1);

 

  1. Przetestuj działanie strony.
  2. Dodaj nowe pozycje do danych osobowych np. Email i telefon.
  3. Przetestuj działanie strony po zmianach.

 

Odczytywanie zbioru wartości ciasteczka

  1. Do dowolnej strony dodaj kod umieszczający w etykiecie dane użytkownika przekazane przez ciasteczko userInfo.

 

Listing 5. Kod wydruku danych użytkownika przekazanych przez ciasteczko userInfo

 

string dane_usera;

if (Request.Cookies["userInfo"] != null)

{

    System.Collections.Specialized.NameValueCollection kolekcja_danych;

    kolekcja_danych = Request.Cookies["userInfo"].Values;

    dane_usera = kolekcja_danych["Nazwisko"] + " ";

    dane_usera += kolekcja_danych["Imię"];

    dane_usera += " Ostatnia wizyta: ";

    dane_usera += kolekcja_danych["Ostatnia wizyta"];

    Label1.Text = dane_usera;

}

 

  1. Przetestuj działanie.
  2. Uzupełnij kod o odczytanie dodatkowych danych wprowadzonych na stronie wysyłającej ciasteczko userInfo.

 

Odczytywanie kolekcji ciasteczek

  1. Na nowej stronie umieść wydruk zawartości kolekcji ciasteczek przekazanych przez przeglądarkę. Na listingu 6 przedstawiono kod umieszczający dane wszystkich odebranych ciasteczek w łańcuchu output.

 

Listing 6. Kod odczytu kolekcji ciasteczek i zapisu odczytanych danych w łańcuchu output

 

HttpCookie Ciacho;

string output = "";

string klucz;

string wartosc;

 

for (int i = 0; i < Request.Cookies.Count; i++)

{

  Ciacho = Request.Cookies[i];

  output += "Nazwa ciasteczka = " + Ciacho.Name + "<br />";

  if (Ciacho.HasKeys)

  {

    output += "Ciastczko zawiera zbiór wartości<br />";

    System.Collections.Specialized.NameValueCollection dane = Ciacho.Values;

    for (int j = 0; j < dane.Count; j++)

    {

      klucz = dane.Keys[j];

      wartosc = dane[j];

      output += "Klucz = " + klucz + "<br />";

      output += "Wartość = " + wartosc + "<br /><br />";

    }

  }

  else

    output += "Wartość = " + Ciacho.Value + "<br /><br />";

}

 

  1. Przetestuj działanie strony.
  2. Spróbuj wydrukowań dane odebranych ciasteczek w tabeli.

 

Projekt

  1. Zapis w ciasteczku danych użytkownika i ich wydruk na stronie.
  2. Zbieranie zamówień przy pomocy ciasteczka.