Советы по Delphi

         

Работа с куками


Цель данного документа не в том, чтобы объяснить что такое куки и как их можно использовать. Вместо этого авторы документа предполагают, что вы знакомы с куками и с тем, как их можно использовать, и хотите узнать как нужно с ними работать из приложения, создаваемого для web-сервера на Delphi 3.

Объекты TWebRequest и TWebResponse, поставляемые с Delphi 3, имеют свойства, позволяющие легко воспользоваться куками. TWebRequest имеет свойства Cookie и CookieFields, позволящие приложению web-сервера читать заголовки куков, посылаемых как часть HTTP-запроса. Объект TWebResponse имеет свойство Cookies, позволяющее приложению web-сервера размещать куки на клиентской машине через заголовок куки как часть HTTP-запроса. Обычно это устанавливается с помощью метода SetCookieField.

Когда сервер отвечает на HTTP-запрос, в ответ он посылает документ с заголовком и "содержательной" секцией. Delphi обеспечивает возможность добавлять заголовок куки через свойство TWebResponse.Cookies. Но лучшим способом является использование метода SetCookieField. Приведенный ниже TWebActionItem демонстрирует технику использования метода SetCookieField для возвращения кука, требующегося браузеру. В данном примере в качестве домена используется localhost. Для работы в реальных условиях замените эту строку на строку с именем вашего домена. Третий параметр - косая черта. Это означает, что кука будет посылаться из браузера со всеми запросами, относящимся к данному домену. Полное описание данных параметров можно обнаружить в документе RFC 2109.

    procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var
MyCookies: TStringList; begin
MyCookies := TStringList.Create; with MyCookies do begin Add('Name=Frank Borland');

Add('Address=100 Borland Way'); Add('Product=Delphi'); end; with Response do begin SetCookieField(MyCookies, 'localhost', '/', (Now + 1), False); Content := 'Куки имплантировано'; end; end;

При запросе, когда сервер HTTP запрашивает браузер клиента, имена всех куков пакуются в и включаются в заголовок в ответ на запрос HTTP. В Delphi 3 сделать это для приложения web-сервера можно двумя путями. Первый способ - как строку через свойство Cookie параметра TWebRequest у TWebActionItem. Также доступно как свойство TStrings с именем CookieFields. CookieFields - разобранное содержимое заголовка кука из сообщения HTTP-запроса.

В следующем TWebActionItems извлекается имя-значения и возвращается клиенту в виде пустой HTML-страницы. В первом примере кука возвращается в виде единственной строки, во втором - каждая пара имя-значение возвращается в отдельной строке.

    procedure TWebModule1.WebModule1WebActionItem2Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin
Response.Content := '' + Request.Cookie + ''; end;

procedure TWebModule1.WebModule1WebActionItem3Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var
i: integer; begin
Response.Content := ''; for i := 0 to (Request.CookieFields.Count - 1) do begin Response.Content := Response.Content + ' ' +
Request.CookieFields[i] + ' ';
end; Response.Content := Response.Content + ''; end;

[001969]



Содержание раздела