Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Cookie speichern (https://www.delphipraxis.net/113728-cookie-speichern.html)

FAlter 13. Mai 2008 19:07


Cookie speichern
 
Hi,

ich möchte die Kekskrümel :mrgreen: speichern.

Dazu habe ich mir den TIdCookieManager (Indy 10) genauer angesehen. In einer Schleife könnte ich die Cookies ja zu einer TStrings hinzufügen:

Delphi-Quellcode:
for I := 0 to Cookie.CookieCollection.Count - 1 do
  SL.Add(Cookie.CookieCollection.Items[I].CookieText);
Und später zu einem jungfräulichen CookieManager hunzufügen:

Delphi-Quellcode:
for I := SL.Count - 1 downto 0 do
  Cookie.CookieCollection.AddSrcCookie(SL[I]);
Die SL zu speichern/laden ist ja dann kein Problem mehr. Kennt jemand Eventuell eine schönere Methode? Zumal so auch noch nicht das komplette Cookie gespeichert wird (Expires usw.), da müsste ich dann noch mehr in die SL oder in ein anderes Format übernehmen (was ich notfalls auch tun werde, aber ich frage lieber nach, ob ich nicht irgendetwas übersehen habe, da ich mir schon oft die Arbeit zu schwer gemacht habe). Ein LoadFromFile/SaveToFile gibt es ja leider nicht. :(

Mfg
FAlter

Nuclear-Ping 14. Mai 2008 06:26

Re: Cookie speichern
 
Was hast du denn vor?

FAlter 14. Mai 2008 09:37

Re: Cookie speichern
 
Hi,

ich möchte die Cookies speichern, um sie später wieder zu laden. Ansonsten ist spätestens nach dem Beenden des Programmes alles verloren. Sämtliche moderne* Browser speichern ja auch ihre Kekse.

Mfg
FAlter

*) Die FF-Rechtschreibprüfung schlägt "modernde" vor :lol: aber ich mein das Gegenteil.

Nuclear-Ping 14. Mai 2008 09:49

Re: Cookie speichern
 
Machst du einen eigenen Browser oder was? Cookies speichern woher?

FAlter 14. Mai 2008 09:57

Re: Cookie speichern
 
Hi,

Irgendwie verstehe ich deine Fragen nicht. Ich möchte einfach Cookies aus dem TIdCookieManager von Indy speichern und später wieder in einen solchen laden. Damit, wenn ich beim nächsten Mal auf eine Seite zugreife, die schon einmal besucht wurde, die TIdHTTP die Cookies mitsendet. Das ist ein generelles Problem, was nichts damit zu tun hat, wie die heruntergeladenen Dokumente danach weiterverarbeitet werden. Ob es nun also ein Browser wird oder ein Spider oder sonstwas ist eigentlich egal. Aber wenn du es wirklich wissen willst: Im Moment ist es eher ein Browser.

Mfg
FAlter

MSSSSM 14. Mai 2008 14:03

Re: Cookie speichern
 
Vllt. das onNewCookie ereignis?
naja, du musst sie ja auch noch auslesen.

ich schaue mir den mal kurz an.
Poste dann per Edit.

mfg

edit:
for!
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
n,i: integer;
begin
n:=idcookiemanager1.CookieCollection.Count-1;
for i:=0 to n do
begin
Memo2.Lines.Add( idcookiemanager1.CookieCollection.Items[i].Domain+' ( '+ idcookiemanager1.CookieCollection.Items[i].Expires+' ) :'+idcookiemanager1.CookieCollection.Items[i].Value );
end;
end;
nur zeigt der die expires nicht an :pale:

mfg

alcaeus 14. Mai 2008 15:21

Re: Cookie speichern
 
Zur Not kannst du immer noch die Response-Header von TidHTTP manuell auseinanderfriemeln und so die Cookies speichern. Ich hab die RFC-Nummer grad nicht im Kopf, aber ich weiss dass es sowas gibt ;)

Greetz
alcaeus

FAlter 14. Mai 2008 16:24

Re: Cookie speichern
 
Hi,

Zitat:

Zitat von MSSSSM
nur zeigt der die expires nicht an :pale:

Wenn ich direkt auch Expires zugreife, sind sie bei mir schon drin (falls vorhanden), aber nicht in CookieText, obwohl in der Hilfe steht:

In der Indy.Sockets Hilfe steht:
CookieText can contain the in the CookieName and Value properties, as well as property values from Expires, Path, Domain, and the Secure flag.


Sollte eigentlich alles wichtige umfassen.

Zitat:

Zitat von alcaeus
Zur Not kannst du immer noch die Response-Header von TidHTTP manuell auseinanderfriemeln und so die Cookies speichern.

Naja, der IdCookieManager nimmt mir ja schon jede Menge Arbeit ab. Daher möchte ich ihn am liebsten weiterhin nutzen. Notfalls kann ich das natürlich.

Laut Indy-Hilfe:
Mfg
FAlter

[edit] Irgendwie komisch, auf einmal wird Expires doch mit gespeichert, wo ich es extra nochmal manuell gespeichert habe, jetzt ist es doppelt vorhanden:

Code:
"[b]delphipraxis_data=a%3A0%3A%7B%7D; path=/; expires=Thu, 14-May-2009 15:36:16 GMT; domain=www.delphipraxis.net[/b]",,,31535982,"<Reserved... following debug data: expires>","Thu, 14-May-2009 15:36:16 GMT"
Eventuell hab ich mich geirrt und es wird in CookieText soch schon alles wichtige gespeichert (Hervorgehoben).

Mfg
FAlter

[/edit]

[edit] Nach dem erneuten Laden des Cookies, auch über Add, scheint Expires verloren zu gehen. Ich versuchs mal mit einzeln speichern. [/edit]

[edit] OK, mit Extra-Zuweisung des Expired klappt es erstmal. Es scheinen allerdings auch einige veraltete Kekse mitgespeichert zu werden. [/edit]


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

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