AGB  ·  Datenschutz  ·  Impressum  







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

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
Seite 1 von 4  1 23     Letzte » 
DelTurbo

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

TCPServer Session/Eindeutige ID ermitteln

  Alt 3. Dez 2017, 10:05
Hallo,
erst mal Frohen 1. Advent.
Da ich nun fast durch bin fehlt mir nur eine einzige Sache. Ich weiß nicht wie ich beim IdTCPServer beim ersten Connecten an eine Eindeutige ID der Session komme.
Ich habe einen IOHandler zugewiesen. Kann man die vielleicht dort finden? Ich habe nun innerhalb der letzten Tage das Internet rauf und runter durchsucht. Leider finde ich nix. Vielleicht suche ich ja auch falsch.

Vielen vielen Dank im Voraus
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DelTurbo

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

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 09:09
Huhu,
tut mir leid wenn ich mal *pushe*
Aber ich habe nun mal versucht das besser zu erklären.

Code:
              +-------------+        +-------------+                      +-------------+                         
              |             |        |             |                      |             |                         
---User 1-----| IdTCPServer |--------| IdTCPServer |---Wenn ID Richtig----|             |------Sonstwohin-----   
---User 2-----|  OnConnect  |--------|  OnExecute  |---Wenn ID Richtig----|Weiterleitung|------Sonstwohin-----   
---User 3-----|             |--------|             |---Wenn ID Richtig----|             |------Sonstwohin-----   
              |      1      |        |      2      |                      |      3      |                         
              +-------------+        +----+-+-+----+                      +-------------+                         
                                          | | |
                                          | | +---Wenn Keine ID=Abbruch
                                          | +-----Wenn Keine ID=Abbruch
                                          |+------Wenn Keine ID=Abbruch
In #1 möchte ich eine Eindeutige ID sie Solange hält bis die Session nach xxx Sekunden gekillt wird.
In #2 Wird wie in diesem Post beschrieben Weitergeleitet wenn alles OK ist.
#2-3 ist hier beschrieben.

Es würde klappen wenn das kein Browser wäre der Weitergeleitet wird. Aber z.b. der IE baut mehrere Verbindungen auf und wieder ab. Und genau da komme ich ins "Schleudern". Mache ist das mit nur einem Browser, klappt es. Gehe ich hin und merke mir die PeerIP klappt es auch von mehreren PCs aus. Leider kann ich nicht nach der IP gehen. Die könnte doppelt sein.

Ich habe gestern den ganzen Tag nach einer Lösung gesucht. Leider finde ich rein gar nichts zu meinem Problem. Geht das nicht? Muss man das anders lösen? Oder kann man ein Cookie einsetzen? Wenn ja wie? Darüber habe ich auch nichts gefunden.
Oder muss ich einen IdHTTPServer nehmen? Dort habe ich eine SessionID gefunden. Aber ich wüsste nicht wie ich die Pakete über IdTcpServer weiterleiten kann.

Vielen dank im Voraus
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
ghubi01

Registriert seit: 18. Nov 2017
127 Beiträge
 
Delphi 12 Athens
 
#3

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 09:37
Hallo,

Du kannst eine eindeutige ID bereits im "OnConnect Ereignis" des Server abfragen:

Delphi-Quellcode:
procedure TCCService.IdTCPServer1Connect(AContext: TIdContext);
var
  BindingID: int64;
begin
  BindingID:=AContext.Binding.Handle; // Das Handle ist für jede Connection immer eindeutig!
end;
Für jede Connection wird immer ein neues Handle vergeben und bleibt dies auch bis zum Disconnect.

.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 09:43
.. auch sollte eine Client Verbindung durch die IP-Adresse und Port eindeutig identifizierbar sein.
AContext.Connection.Socket.Binding.PeerIp bzw. .PeerPort

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
DelTurbo

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

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 09:59
Hi,
vielen dank für die Antworten. Leider klappt es so nicht.

Das Problem beim OnConnect ist, das sich, obwohl ich vom gleichen Rechner komme der Port ändert. Der wird immer einen Hochgezählt.

Das mit dem Handle ist schon eine gute Idee. Aber wie gesagt, der Browser macht mehr als eine Verbindung auf und zu während er eine Seite lädt. Da geht mir dann das Handle leider immer Verloren.

Ich habe schon versucht AContext.Connection.Tag zu missbrauchen. Aber das wird leider auch auf null gesetzt wenn der Browser während dem Laden eine zusätzliche Verbindung aufbaut. Und das ist mein Problem. Wenn er während dem Laden eine neue Verbindung aufbaut "kenne" ich den nicht mehr.

Würde das alles Seriell laufen, wäre das alles kein Thema. Aber so weiß ich nun nach einer Woche suchen, hier zig Threads aufmachen (was ich eigentlich nicht möchte) wirklich nicht mehr weiter.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#6

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 10:17
Hmm..

Ich glaube, dass dies auf Basis von TCPClient/TCPServer nur möglich ist, wenn beide ein aufgesetztes Protokoll verwenden.


Hier mal (schnell überflogen) das Prinzip bei HTTP:
https://de.wikipedia.org/wiki/Sitzungsbezeichner

Ohne serverseitige Generierung einer SessionID, welche der Client bei jeder Anfrage mitsendet, wird das wohl nicht klappen.
  Mit Zitat antworten Zitat
DelTurbo

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

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 10:30
Hi,
also müsste ich es "nur" hinbekommen das ich im OnConnect eine ID erzeuge und dann dem Browser eine URL zurück gebe die z.b. so aussieht:

Er Connected mit http://example.com und bekommt zurück http://example.com?sid=7438432299229.

Na das wäre ja geil wenn man das mit dem TcpServer hinbekommt. Allerdings kennt der TcpServer ja keinerlei Protokoll.

Wie könnte man das umsetzen? Hat da vielleicht einer eine Idee? Ich habe im Moment ein Brett vorm Kopf. Ich habe soviel gesucht das ich im Moment nicht mehr weiß wo oben und unten ist

Erst mal vielen dank für die Anregungen.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 10:35
Wie könnte man das umsetzen? Hat da vielleicht einer eine Idee? Ich habe im Moment ein Brett vorm Kopf.
Erste Frage: setzt Du ein eigenes Protokoll ein/auf, oder nutzt Du ein Standardprotokoll a la HTTP?

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

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

AW: TCPServer Session/Eindeutige ID ermitteln

  Alt 4. Dez 2017, 10:40
Ich habe leider gar kein Protokoll. Da ich nach der Authentifizierung alles 1:1 weitergeben muss. Das ist die Schleife die ich im 2. Post verlinkt habe.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#10

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.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:37 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