AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TCPServer Session/Eindeutige ID ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

TCPServer Session/Eindeutige ID ermitteln

Offene Frage von "HolgerX"
Ein Thema von DelTurbo · begonnen am 3. Dez 2017 · letzter Beitrag vom 5. Dez 2017
Antwort Antwort
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.420 Beiträge
 
Delphi 12 Athens
 
#1

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 11:24
Wenn Du alles 1:1 weiter geben musst, dann wird es so gut wie unmöglich. Ansonsten könntest Du via Header-Änderungen einen Cookie setzen und diesen später wieder auswerten.

......
Lizbeth W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
ghubi01

Registriert seit: 18. Nov 2017
136 Beiträge
 
Delphi 12 Athens
 
#2

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 11:32
Hallo,

die TIdHTTPServer Klasse enthält ein Property "SessionList" das als Container für TIDHTTPSession Instancen dient.
TIDHTTPSession enthält ein Property "SessionID". Ich habe mich jetzt nicht näher damit beschäftigt, aber vielleicht
kannst Du damit irgendwie arbeiten.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.248 Beiträge
 
Delphi 2007 Architect
 
#3

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 12:11
Wenn Du alles 1:1 weiter geben musst, dann wird es so gut wie unmöglich. Ansonsten könntest Du via Header-Änderungen einen Cookie setzen und diesen später wieder auswerten.
Mit 1:1 habe ich mich unglücklich ausgedrückt. Ich bin auch noch im IdTCPServer.OnConnect. Um das überhaupt mal ans Laufen zu bekommen hab ich dort die PeerIP geholt und mir mit der ZielAdresse wo er hin soll in einer Stringliste gemerkt.

Das klappt auch alles wunderbar. Aber ich muss über eine eindeutige ID gehen. Gibt nichts womit ich im OnConnect, wie eben von HolgerX beschrieben, irgendwas an den Browser übergeben kann? Und lasse ihn dann ins OnExecute springen. Wenn er wieder über OnConnect kommt müsste der Browser die ID die ich ihm geben habe ja wieder mitbringen und ich kann ihn eindeutig zuordnen.

Gibt es eventuell irgendwas was ich in das Onconnect einbauen kann, und er mit diesen Parameter setzt bzw. holt?
Oder müsste ich das HTML von Hand zerpflücken eine Antwort mit der ID geben und dann ins Execute laufen lassen? Ich denke mal das es sehr aufwendig ist, oder?

Nachtrag: Es müsste eine Komponente sein die ich auch in Codetyphon wieder finde. Das soll später auf einem Unix-System laufen.
Noch ein Nachtrag: Es reicht im Grunde auch wenn es nur auf Delphi läuft. Hauptsache ich komme der Sache näher.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!

Geändert von DelTurbo ( 4. Dez 2017 um 12:20 Uhr)
  Mit Zitat antworten Zitat
4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#4

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 15:33
TCP alleine gibt das nicht her. Selbst wenn irgendwo ne Sessionliste existiert, basiert die auf PeerIp und Port.
Wenn du im Connect schon weitere Kommunikation Blocken willst wirst du keine andere Möglichkeit haben.

Im Execute kannst du natürlich z.b. ne erst PW/User zum Server schreiben, Dort verifizieren und dann ID zum Client schreiben.
Aufm Server noch nen Timeout hinterlegen und beim nächsten mal mit der ID vergleichen, die der Client jetzt immer schickt...

TIdContext müsste ausserdem ein Data Property haben, dem du z.b. ein Objekt zuordnen kannst.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.248 Beiträge
 
Delphi 2007 Architect
 
#5

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 15:53
Hi,
ich bin immer noch da dran. Also mit TIdContext.Data habe ich es auch schon versucht. Das macht aber auch den Disconnect/Connect vom Browser nicht mit. Man kann es setzen und wieder auslesen. Allerdings wird es mitten beim Laden der Seite wieder Nil. Das heißt, meine ID oder was auch immer ist weg.

Was ich gerade versuche ist, das ich auf einem IdHTTPServer Connecte. Dann wollte ich mir von dort die AResponseInfo.Session.SessionID "Klauen" und mit TIdContext in IdTCPServer.Execute springen.

Allerdings weiß ich garnicht ob das klappt. Zumal ich eine HTTPS Verbindung brauche. Um nicht noch mehr stolperfallen zu haben, versuche ich es im Moment ohne HTTPS. Ich weiß auch nicht ob ich beiden (IdHHTPServer und IdTCPServer) den gleichen IOHandler geben kann.

Was ich noch gar nicht weiß ist ob das überhaupt klappt was ich vorhabe. Aber ich werde es mal versuchen. Entweder es geht, oder nicht. Allerdings bin ich so langsam am ende. Ich hatte noch nie soviele Probleme.

Trotzdem danke

Nachtrag: Hat sich schon erledigt. Ich kann ja gar nicht 2 Sachen auf einen Port legen.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!

Geändert von DelTurbo ( 4. Dez 2017 um 15:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#6

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 16:02
Für eine einzige Webseite gibt es oftmals schon mehrere Connections (HTML, CSS, JS, Bilder, ....)
und beim Refresh oder Laden der nächsten Seite erneut.

Für TCP sind das alles einzelne "unabhängige" Verbindungen, wie du bereits bemerkt hast.
Darum wurden dir auch Cookies empfohlen. Dort kannst du der "Session" im Browser eine ID verpassen, welche dann für alle nachfolgenden Verbindungen mit an dich übermittelt werden.
Aber dort mußt du dein Vorhaben eben auf Ebene des HTTP umsetzen und nicht im TCP, oder du fängst an das HTTP dort selber "nochmal" zu implementieren, also nach dem Connect die ersten paar Byte/Zeilen (den HTTP-Header) abwarten/auslesen und darauf dann die Verbindung zu steuern.


Im selben Browser mehrere gleichzeitige Fenster/Tabs lassen sich so aber auch nicht wirklich unterscheiden, außer du baust die ID in die URL ein, da sich die Tabs/Fenster die selben Cookies teilen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 4. Dez 2017 um 16:06 Uhr)
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.248 Beiträge
 
Delphi 2007 Architect
 
#7

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 16:21
Aber dort mußt du dein Vorhaben eben auf Ebene des HTTP umsetzen und nicht im TCP, oder du fängst an das HTTP dort selber "nochmal" zu implementieren, also nach dem Connect die ersten paar Byte/Zeilen (den HTTP-Header) abwarten/auslesen und darauf dann die Verbindung zu steuern.
Und daran breche ich mir im Moment wirklich einen ab. Ich wollte nur nachsehen ob z.b. ??.Session.Content.Values['xxx']='jkds8838923' ist. Schon das gelingt mir nicht. Obwohl ich mal alle Daten mit geloggt habe. Ich wüsste nun im Moment auch nicht, wie ich ihm das bei der ersten Antwort von dem anderen Client "unterschieben" sollte. Muss ja nur bei der ersten Antwort sein.

Ich dachte mir das so:
Ist der Parameter nicht gesetzt, dann muss es ein neuer Client sein. Dann den Parameter setzen und ich würde den immer "wiederfinden" wenn er was möchte. Halt bis man das Browserfenster zu macht.

An Cookies habe ich mich schon gar nicht ran getraut.

Im Moment steht ich echt auf dem Schlauch.....
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#8

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 16:46
Hier geht eben keine automatische Sessionverwaltung.
Bei TCP ist "standardmäßig" eine Session nur so lange, wie die Connection arbeitet und wird nicht automatisch über mehrere Connections geshared.
Das mußt du übernehmen.
(auch bei HTTP ist das nicht standardmäßig drin, aber kann mit vorhandenen Funktionalitäten umgesetzt werden)

1: Bei der ersten Connection eine ID generieren und an den Clienten senden (er speichert sie in den Cookies).
2: Der Client sendet diese ID dann innerhalb seine Session bei nachfolgenden Connections wieder an dich zurück.
3: Du schaust dann ob eine ID übermittelt wurde (wenn nicht, dann Punkt 1) und setzt/nutzt für nachfolgende Connections (innerhalt der Session der einzelnen TCP-Verbindungen) die übermittelte ID (nach Authentifizierung, dass diese ID auch noch gültig ist ... wenn nicht dann zu 1).

So wird z.B. die Session-Verwaltung hier im Forum gehandhabt.



Wenn Cookies gesperrt sind, dann könnte man die Session-ID als Parameter in die URL einbauen.
Nach dem Laden der ersten Seite eine Weiterleitung zur URL inkl. SessionID und dann auf der Webseite auch alle Links mit dieser ID anpassen/erweitern.

Alternativ kann man die Session eben anhand der IP verwalten, aber da geht pro IP nur eine Session. (auf HTTP-Ebene kann man das noch um Browser-Kennung und Dergleichen erweitern)
- der Server speichert sich zur IP eine Session-ID oder nutzt die IP direkt als ID.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 4. Dez 2017 um 16:57 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:56 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