Autor Beitrag
Niko S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 566
Erhaltene Danke: 10

Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
BeitragVerfasst: Di 05.01.10 17:48 
Ja also ich bin da grad irgendwie auf dem Holzweg..
Ich suche eine Methode einen Clienten mehr oder weniger eindeutig zu Identifizieren.
Gehen würde das mit nem Cookie oder ner Session, nur wie stell ich das an?
Mir würde es reichen das über nen Cookie zu machen oder halt über eine Session, je nachdem was leichter wäre.
Kann mir da mal jemand helfen, ich find da i-wie auch nichts was mit httpserver zu tun hat ;x
Muck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98
Erhaltene Danke: 8

Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
BeitragVerfasst: Di 05.01.10 19:26 
Hallo,

in meinem FTP Server benutze ich einfach Socket.Data. Da setze ich einfach eine Session Nummer.

Bei HTTPServer z.B. Cookie Write:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var WriteCookie::TIdCookieRFC2109;
begin
          WriteCookie := responseinfo.Cookies.Add;
          WriteCookie.CookieName := 'MeineVar';
          WriteCookie.Value := 'user=144';
          WriteCookie.Domain := 'meineseite.de'
          WriteCookie.Expires := 'Wed, 30-SEP-2020 01:00:01 GMT';
end;


und lies cookie mit:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Function Cook(var RI:TIdHTTPRequestInfo):String;
var ReadCookie:TIdCookieRFC2109;
begin
ReadCookie := RI.Cookies.Cookie['MeineVar'];
if (ReadCookie = nilthen begin Result:='' else Result:=ReadCookie.Value;
end;


Ausserdem kannst Du auch einfach eine Session Variable im generierten HTML Code setzen und diese dann bei einen erneuten HTTP Get auslesen.
Ich habe das in meinem Server damals so geloest, dass ich in der HTML Datei eine hidden variable defniert habe mit dem Wert $$Sess$$.

[HTML]
<input type="hidden" name="sess" id="sess" value="$$Sess$$">
[/HTML]

Ich lese die HTML Datei im GET ein mache einen StringReplace $$Sess$$ und ersetze das mit der genierten Session Nummer.
Packe den String in einen Stream und sende es zum Client.
Bei erneuten Aufruf durch den Client lese ich den Session Wert wieder aus dem IdHTTPRequestInfo.
Alles was Du machen musst ist, wenn der Parameter sess nicht definiert ist im RequestInfo dann halt generieren.
Nicht die feine Art, aber funktioniert halt ohne Session Automatik und ohne cookies.

Beispiel ist www.TrackDollar.com das ist eine Delphi EXE mit IdHTTPServer.

Bin mir sicher es gibt bessere Moeglichkeiten, aber bin halt damals diesen Weg gegangen und funktioniert gut auf allen Browsern selbst wenn Cookies deaktiviert sind.

Tschuess

Markus von weit wech
Niko S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 566
Erhaltene Danke: 10

Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
BeitragVerfasst: Di 05.01.10 20:22 
Ja wusste nicht wie ich das mache, aber ne hidden Variable rauslesen bzw schreiben, darauf war ich auch schon gekommen, nur wusste ich nicht wie man das umsetzt.
Danke für den Tipp ich werds mal Probieren & wenn ichs nicht hinbekomm, werd ich mich wieder an dich wenden.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 05.01.10 22:22 
Moin!

Schau dir mal die Indy-Demo zum IdHTTPServer an, da ist ein komplettes Session-Beispiel drin, muss man praktisch nix mehr machen. :idea: ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Niko S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 566
Erhaltene Danke: 10

Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
BeitragVerfasst: Mi 06.01.10 21:58 
Das ist das erste was ich mache, nur sind die die noch vorhanden sind, nicht die die ich brauche.

@Topic
Die Cookies werden nicht erstellt, ich habs auch mit MaxAge probiert, aber ich habe nie Cookies in meinem Browser...
Weiß wer woran's liegen könnte? Hab schon stundenlang gesucht, weils Forum ja Off war, aber irgendwie habe ich nichts brauchbares finden können. -seufz-
Muck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98
Erhaltene Danke: 8

Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
BeitragVerfasst: Mi 06.01.10 22:20 
Hallo,

zeige doch einfach mal Deine HTTPServerCommandGet Routine. Bin mir sicher jemand kann helfen hier.

Soweit ich mich erinnere musste ich waehrend der Testphase (getestet lokal) den Wert fuer WriteCookie.Domain auf die lokale IP einstellen. Den Website Namen kannst Du erst einsetzen wenn Dein Programm wirklich auf diesem Server laeuft.

Also probiere doch mal
ausblenden Delphi-Quelltext
1:
WriteCookie.Domain:='192.168.1.10'// oder was auch immer Deine Test Server IP ist.					


Vielleicht ist das ja schon der Grund.

Markus
Niko S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 566
Erhaltene Danke: 10

Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
BeitragVerfasst: Mi 06.01.10 22:28 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TServer.SetCookie(var RI: TIdHTTPResponseInfo);
var
  Cookie: TIdCookieRFC2109;
begin
  Cookie := RI.Cookies.Add;
  Cookie.CookieName := 'SSED';
  Cookie.Value := 'test';
  Cookie.Domain := '127.0.0.1';
  cookie.MaxAge := 600;
end;


Tja so sieht das aus, beim Prüfen, ob ResponseInfo auch cookies besitzt, also "Count" kommt auch "1" raus.
Nur landen die NIE im Browser.

PS: ich weiß dass es für die Params ne andere methode gibt, das war jetzt nur zum testen ;x

PPS: Okay es funktioniert nun, allerdings muss ich auf die Lan IP gehen und nicht über localhost bzw 127.0.0.1
Das funktioniert, warum auch immer, nicht.