Проблема с проверкой cookies в CGI

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Проблема с проверкой cookies в CGI

Сообщение vadv55 » 19.05.2020 17:46:59

Установлены ОС ALT Workstation 8.1, IDE Lazarus 2.0.2.
Cookies в браузере задаются при помощи META тега в заголовке HTML страницы (http://z-oleg.com/delphi/cookies.htm):
Код: Выделить всё
<META HTTP-EQUIV="Set-Cookie" CONTENT="name=password; PATH=/">

В соответствии с примером (https://wiki.freepascal.org/CGI_Web_Programming/ru) проверка cookies в CGI-программе производится следующим образом:
Код: Выделить всё
program cgiproject1;

{$mode objfpc}{$H+}

uses
  fpCGI, Unit1, dos;

const
  f0: String[13]='name=password';
var
  f: String;
  i: Integer;

begin
  f:=GetEnv('HTTP_COOKIE');
  if f='' then
  begin
    writeln('Error: no cookie');
    Halt
  end;
  i:=pos(f0,f);
  if i=0 then
  begin
    writeln('Error: no password');
    Halt
  end;
  Application.LegacyRouting:=True;
  Application.Title:='cgiproject1';
  Application.Initialize;
  Application.Run;
end.

В результате её выполнения происходит следующая ошибка сервера (500):
Error message:
Premature end of script headers: cgiproject1.cgi

Если же CGI-программа запускается без проверки cookies, то ошибки сервера не происходит:
Код: Выделить всё
program cgiproject1;

{$mode objfpc}{$H+}

uses
  fpCGI, Unit1;

begin
  Application.LegacyRouting:=True;
  Application.Title:='cgiproject1';
  Application.Initialize;
  Application.Run;
end.

В чём же заключается причина возникновения ошибки сервера? Буду признателен за любой совет по данной проблеме.
vadv55
новенький
 
Сообщения: 27
Зарегистрирован: 16.01.2014 14:08:12

Re: Проблема с проверкой cookies в CGI

Сообщение Pavia » 19.05.2020 20:31:07

Апач ждёт заголовок
writeln('Content-Type:text/html',#10#13);
А вы его не возвращаете. Halt - моментально закрывает приложение.

fpWeb имеет другой шаблон. Так что код вам надо переписать
https://wiki.freepascal.org/fpWeb_Tutorial
Я бы за основу взяли из примера функцию и её по правил
procedure TFPWebModule1.HTMLEntityProducer1WriteEntity(Sender: THTMLContentProducer; aWriter: THTMLWriter);
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Проблема с проверкой cookies в CGI

Сообщение vadv55 » 08.06.2020 15:36:40

Спасибо за совет. Причиной же возникновения ошибки сервера явилось прекращение поддержки современными браузерами создания cookies при помощи META тегов из соображений безопасности (https://www.fxsitecompat.dev/en-CA/docs/2019/setting-cookies-with-meta-http-equiv-is-no-longer-allowed/), что и повлекло за собой прогнозируемое в этом случае аварийное завершение работы CGI-программы.
vadv55
новенький
 
Сообщения: 27
Зарегистрирован: 16.01.2014 14:08:12


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30

Рейтинг@Mail.ru