Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy10 Cookie weiterverwenden (https://www.delphipraxis.net/117414-indy10-cookie-weiterverwenden.html)

SUIW 17. Jul 2008 18:14


Indy10 Cookie weiterverwenden
 
Hallo,

ich habe mittel idHttp ein Programm geschrieben, welches sich in einem Loginform anmeldet,
mit Indy 10 (idHttp+idCookieManager) funktioniert das auch super, nur sobald ich eine weitere
Seite mit idHttp aufrufe bin ich wieder ausgelogt weil der Cookie nicht mit übertragen wird.

Weis einer weiter?

blackdrake 20. Jul 2008 19:22

Re: Indy10 Cookie weiterverwenden
 
Hallo.

Mit Indy+Cookies habe ich noch nicht das vergnügen gehabt.

Zu erst einmal: Ich hoffe, du redest von "anderen" Seiten der selben Domain. Dass das Cookie von Domain 1 nicht an Domain 2 weitergegeben wird, ist selbstverständlich.

Ich gehe mal davon aus, dass du den Cookie als String vorliegen hast, oder?

Wenn du den Cookie hast, müsstest du ihn nur in das Request-Paket der nächsten HTTP-Anfrage miteinfließen lassen (willst du eine GET oder eine POST Anfrage stellen?)

Du kannst mit http://web-sniffer.net/ dir eine Seite mit Request+Response ansehen.

Rufe ich eine Seite auf, die ein Cookie erfordert, steht im Response sowas wie:

Code:
Set-Cookie: PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; path=/
Du bekommst den Keks also, wenn du die Response-Variable 'Set-Cookie' einholst.

Akzeptiert der "Browser" (dein Programm) nun keine Cookies, ignoriert er diesen Teil und verfährt weiter ohne Cookies. Indy wird dem Programmierer sicherlich freistellen, ob er Cookies annimmt/weitergibt oder nicht, deswegen wird die Funktion sicherlich nicht automatisch durchgeführt.

Willst du das Cookie verwenden/annehmen. Musst du bei allen weiteren Seitenaufrufen folgendes in den Request eingehen lassen:

Code:
Cookie: PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
(Achtung: Wenn mehrere Cookies gesetzt, werden sie mit einem Strichpunkt und einem Leerzeichen (; ) voneinander getrennt.)

Dann hat das Script auf der Serverseite das Cookie erhalten (in diesem Falle die PHP-Sessionkennung).

Poste uns doch ein wenig Code, auch wenn du das Problem gelöst hast. Ist für andere Leute, die das selbe Problem haben, sicherlich wertvoll.

Gruß
blackdrake

//Edit: Schau dir aber nochmal die Parameterliste von Indy an. Vielleicht gibt es einen Boolean-Schalter, der das automatische Verwalten von Cookies für dich übernimmt. Dann sparst du dir vielleicht Arbeit mit den Request-Headeranalysen und den Response-Erweiterungen.

nat 20. Jul 2008 20:01

Re: Indy10 Cookie weiterverwenden
 
ich hatte mal das gleiche problem. der hat den cookie einfach nicht mitgesendet.
obwohl ich eigentlich davon ausgehen würde, dass der cookiemanager dafür
da is um das zu managen... aber naja... ich habe mir dann so geholfen:

Delphi-Quellcode:
procedure TChecker.NewCookieEvent(ASender: TObject;
  ACookie: TIdCookieRFC2109; var VAccept: Boolean);
begin
  FCookieData.Values[ACookie.CookieName] := ACookie.Value;
end;

function TChecker.GetCookieString: String;
var i: integer;
begin
  for i:=0 to FCookieData.Count-1 do
    result := result+format('%s=%s;', [FCookieData.Names[i], FCookieData.ValueFromIndex[i]]);
end;


...

  FHTTP := TIdHTTP.Create(self);
  FHTTP.CookieManager := TIdCookieManager.Create;
  FHTTP.CookieManager.OnNewCookie := NewCookieEvent;
  FHTTP.AllowCookies := true;
  FHTTP.HandleRedirects := true;
  FCookieData := TStringList.Create;

...

  FHTTP.Request.CustomHeaders.Values['Cookie'] := GetCookieString;
  response := FHTTP.Get(url);


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz