Programowanie w języku Delphi » Artykuły

Internetowe zastosowania Delphi cz. 3

Internetowe zastosowania Delphi cz. 3


Artykuł powstał na podstawie rozdziału 30. książki Delphi 4. Vademecum profesjonalisty (tom II). Zachowano także oryginalne fragmenty kodu źródłowego przykładowej aplikacji. W trzeciej części artykułu skupimy się na realizacji stanu wewnętrznego aplikacji - klienta za pomocą cookies oraz przenoszeniu wywołań do innej sieci.

Protokół HTTP jest protokołem bezstanowym - tzn. nie udostępnia żadnego mechanizmu, dzięki któremu kolejne żądania od tej samej aplikacji mogłyby odczytywać i modyfikować przeznaczoną tylko dla nich specyficzną informację, stanowiącą właśnie stan aplikacji w rozumieniu teorii automatów.

Istnieje jednak mechanizm symulujący stan wewnętrzny aplikacji - klienta. Są to zapisywane na dysku stałym komputera klienta informacje przeznaczone dla następnych żądań. Mechanizm ten nosi nazwę cookies (popularne "ciasteczko" w języku polskim). Każda pozostawiana wartość ma postać Nazwa=Wartość. Internet Explorer zapisuje każde cookie w osobnym pliku w folderze Windows\Cookies, Netscape Navigator - w pojedynczym pliku Cookies.txt. Można oczywiście wyłączyć zapisywanie cookie, ale jest to temat na artykuł o konfiguracji przeglądarek internetowych.

Do zapisywania cookies służy metoda SetCookieField klasy TWebResponse:

procedure TWebResponse.SetCookieField(Values: TString;
  const ADomain, APath: string; AExpires: TDateTime;
  ASecure: Boolean);


Parametr Values reprezentuje listę łańcuchów (pochodną klasy TStrings, zazwyczaj TStringList) zawierająca treść jednego lub kilku cookies.

Parametry ADomain i APath umożliwiają ograniczenie zapisywania cookies do wybranej domeny DSN i opcjonalnie do wybranej ścieżki w ramach domeny.

Parametr AExpires określa termin ważności zapisywanych cookie - po jego upływie aplikacje odczytujące cookies powinny je ignorować. Wartość ta powinna być wyrażana względem czasu GMT (ze względu na potencjalną uniwersalność geograficzną aplikacji). Wysyłając cookie ze wsteczną datą spowodujemy unieważnienie istniejącej już w komputerze klienta cookie o identycznej postaci - pod warunkiem, iż antydatowane cookie rzeczywiście do niego dotrze.

Parametr ASecure określa, czy cookies powinny być wysłane przez kanał nie uznany za bezpieczny. Parametr ten ma zazwyczaj wartość False, co blokuje tą możliwość.

Cookies obecne w komputerze klienta włączane są automatycznie do formułowanego żądania. W aplikacji serwera znajdują się one pod właściwością TWebRequest.CookieFields parametru Request procedury zdarzeniowej OnAction. Właściwość ma postać listy łańcuchowej z każdą pozycją o postaci Nazwa=Wartość.

Przeniesienie wywołania do innej sieci


Dla przykładu rozpatrzmy następujący kod HTML (zachowano oryginalny kod z książki):

<HR>Zobacz także ofertę <A HREF="http://www.hackers.ag/trap.dll/reg?HELION&www.helion.com.pl"> Wydawnictwa Helion </A>


W wyniku kliknięcia tego hiperłącza sterowanie przekazywane jest do biblioteki trap.dll na serwerze www.hackers.ag i wywoływana jest akcja /reg. Może ona np. zapisać, że odwiedzający stronę kliknął w to łącze. Strona Wydawnictwa Helion jednak się pojawia. Dlaczego? Oto fragment obsługi zdarzenia OnAction:

// ...
// W zmiennej Request.QueryFields[0] znajduje się pierwszy parametr
// określający kryptonim firmy, na którą mamy oko.
// Teraz przekazujemy sterowanie do strony podanej jako drugi parametr
Response.SendRedirect(Request.QueryFields[1]);
// ...


To wszystko w tym artykule. Może powstanie czwarta część, o wprowadzaniu danych za pomocą formularzy HTML, ale niczego nie obiecuję ;).