![]() |
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? |
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 ![]() Rufe ich eine Seite auf, die ein Cookie erfordert, steht im Response sowas wie:
Code:
Du bekommst den Keks also, wenn du die Response-Variable 'Set-Cookie' einholst.
Set-Cookie: PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; path=/
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:
(Achtung: Wenn mehrere Cookies gesetzt, werden sie mit einem Strichpunkt und einem Leerzeichen (; ) voneinander getrennt.)
Cookie: PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
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. |
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