Цель данного документа не в том, чтобы объяснить что такое куки и как их можно использовать. Вместо этого авторы документа предполагают, что вы знакомы с куками и с тем, как их можно использовать, и хотите узнать как нужно с ними работать из приложения, создаваемого для 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]