Файлы cookie Indy10 с Delphi 2010 - файлы cookie не отправляются - PullRequest
1 голос
/ 06 марта 2012

У меня возникла проблема при попытке отправить cookie с использованием Delphi 2010 и Indy 10.5.8.Приведенный ниже код показывает процедуры

, используемые для первоначального входа в систему и аутентификации пользователя - проверьте серийный номер, затем вход в систему пользователя, а затем опросите всех других зарегистрированных пользователей.

Шаг 2 - снова войти в систему и запросить базу данных форума пользователей.Это второй шаг, который не выполняется из-за отсутствия файлов cookie.

См. Прилагаемый JPG о том, что происходит (содержимое «AllPosts»).На этом рисунке показана диагностика, сгенерированная мной программой при попытке доступа к базе данных форума.Форум возвращает информацию о файлах cookie, когда я вхожу в систему, но команда Indy10 Put не отправляет файлы cookie обратно при последующих вызовах на форум.

Здесь приведены исключения из кода, используемого для доступа к форуму.Первые 4 процедуры относятся к входу в лобби, а последние 2 - для доступа к форуму.В прикрепленном JPG вы видите, что первый вызов TransmitPost успешно заходит на форум и получает Cookie в ответе.Последующий вызов TransmitPost получает сообщение об ошибке с номером 46, которое указывает, что Cookie отсутствует.Оба эти вызова выполняются из обычной процедуры ViewForum, представленной ниже.

Менеджер файлов cookie был настроен во время разработки.

// ****************************************************************************
procedure TNetPlayForumForm.TransmitRequest(const ReturnCode: Boolean = True;
                                        const ShowResponse: Boolean = True);
var
  Response: String;
begin
  Response := IdHTTPForum.Get(IPAdd);

if ShowResponse then AllPosts.Lines.Add(Response)
else GoodMessage('Ready.');

if ReturnCode then ResponseInteger := ExtractNumber(Response, ResponseData)
else
begin        // No return code for some transmissions.
  ResponseInteger := 0;
  ResponseData := Response;
end;
// ****************************************************************************
procedure TNetPlayForumForm.QVerifySerial;
begin
  BusyMessage('Verifying the serial number: ' + SerialNumber);
  AllPosts.Lines.Add('Verifying the serial number: ' + SerialNumber);
  IPAdd := rsNetPlayForumServer + Format(rsVerifySerial, [SerialNumber]);
  TransmitRequest;
end;
// ****************************************************************************
procedure TNetPlayForumForm.QLoginUser;
begin
  BusyMessage('Logging in: ' + UserName + ' on port ' + MyPortNumber + '.');
  AllPosts.Lines.Add('Logging in: ' + UserName + ' on port ' + MyPortNumber +
                     '.');
  IPAdd := rsNetPlayForumServer +
           Format(rsLoginUser, [SerialNumber, UserName, Password, MyPortNumber]);
  TransmitRequest;
end;
// ****************************************************************************
procedure TNetPlayForumForm.QPollTheLobby;
begin
  BusyMessage('Polling the forum for players on-line.');
  IPAdd := rsNetPlayForumServer + Format(rsPollTheLobby, [SerialNumber]);
  AllPosts.Lines.Add('Polling the forum for players on-line.');
  AllPosts.Lines.Add('IP addresses for players on-line:');
  TransmitRequest(False);
end;
// ****************************************************************************
procedure TNetPlayForumForm.TransmitPost;
var
  Response: String;
  RawHeaders: TIdHeaderList;
  Indx: Integer;
  RawHeader: String;
  Nam: String;
  PostStream: TStream;
begin
  PostStream := TStringStream.Create('');
  Response := IdHTTPForum.Put(IPAdd, PostStream);
  PostStream.Free;
  RawHeaders := IdHTTPForum.Request.RawHeaders;

  for Indx := 0 to RawHeaders.Count - 1 do
  begin
    Nam := RawHeaders.Names[Indx];
    RawHeader := 'Request: ' + Nam + ' = ' + RawHeaders.Values[Nam];
    AllPosts.Lines.Add(RawHeader);
  end;

  AllPosts.Lines.Add(Response);
  ResponseInteger := ExtractNumber(Response, ResponseData);
  RawHeaders := IdHTTPForum.Response.RawHeaders;

  for Indx := 0 to RawHeaders.Count - 1 do
  begin
    Nam := RawHeaders.Names[Indx];
    RawHeader := 'Response: ' + Nam + ' = ' + RawHeaders.Values[Nam];
    AllPosts.Lines.Add(RawHeader);
  end;
end;
// ****************************************************************************
procedure TNetPlayForumForm.ViewForums;
// ****************************************************************************
// Forum elements: This, Parent, Forum, Topic.  There can be multiple topics.
// A forum element contains: ID, Status, Type, Name
//                           Poster, Description, Topics, Posts
//                           LastPostDate, LastPostUser, Views, Replies, URL.
// ****************************************************************************
begin
  IPAdd := rsNetPlayForumAccess +
           Format(rsLoginToForum, [SerialNumber, UserName, Password]);
  TransmitPost;
  IPAdd := rsNetPlayForumAccess + rsViewForums;
  TransmitPost;
end;
// ****************************************************************************

Буду признателен за любые советы относительно того, как я могу вставить информацию о файлах cookie в последующие обращения к форуму, чтобы успокоить привратника форума.

image of diagnostic messages

...