Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Getrennte Webanwendungsdaten je Browsertab (https://www.delphipraxis.net/176957-getrennte-webanwendungsdaten-je-browsertab.html)

mjustin 7. Okt 2013 15:33


Getrennte Webanwendungsdaten je Browsertab
 
Hallo,

wie würdet Ihr vorgehen, um eine Indy-basierte Webanwendung so zu gestalten, dass jeder Browser Tab eine eigene Instanz der Webanwendung hat?

Dabei soll der Client nicht auf verschiedene URLs (example.com/1 und example.com/2) oder Ports (:8080, :8081, ...) zugreifen müssen.

Instanz heisst hierbei nicht, je Client eine eigene EXe Datei des Servers zu haben, sondern nur die Daten zu trennen.

Phoenix 7. Okt 2013 15:49

AW: Getrennte Webanwendungsdaten je Browsertab
 
Bei so einer Frage kräuseln sich mir echt die Zehennägel auf.

Web / HTTP ist per Definition mal Stateless. Also hat ein Tab im Browser mal grundsätzlich genau überhaupt nichts mit Instanzen / Daten auf dem/den Server(n) zu tun zu haben.

Was Du vermutlich hast, sind Sessions. Das ist der einzige Weg, wie ein Server einen Request einem existierenden Client (und ggf. gecachten Daten) wieder zuordnen könnte. Und Du willst vermutlich pro Tab im Browser eine eigene Session machen. Vermutlich sind die Informationen zur Session aktuell in einem Cookie abgelegt. Tabs im Browser teilen sich die Cookies (ein lokaler Cookie ist im übrigen ein einfacher Weg, um Daten zwischen Tabs auszutauschen).

Das einfachste wäre also, die ID der Session nicht in einem Cookie vorzuhalten, sondern einfach an die Url zu hängen. Also example.com/page?sessionID={someValue}

Die Sessions unterscheiden sich dann nur über den Wert der ID. Eine andere Möglichkeit gibt es eigentlich auch nicht.

Das ist im übrigen eine eher ungeschickte Idee. User wissen, das sie normalerweise mit einem einfachen Ctrl-Klick einen neuen Tab aufmachen, und dorteinfach weiter arbeiten und nach belieben zwischen ihren Tabs wechseln können (Web = stateless, da geht sowas). Das dürfte ziemlich viele User in ihrem gewohnten Arbeiten massiv einschränken.

mjustin 7. Okt 2013 17:25

AW: Getrennte Webanwendungsdaten je Browsertab
 
Zitat:

Zitat von Phoenix (Beitrag 1231042)
Das einfachste wäre also, die ID der Session nicht in einem Cookie vorzuhalten, sondern einfach an die Url zu hängen. Also example.com/page?sessionID={someValue}

Ok. Die Sessions müssen nicht unbedingt getrennt sein. Es wäre in Ordnung wenn es eine Session gibt, die bei der Anmeldung erzeugt wird und den Benutzer über alle Tabs hinweg identifiziert. Getrennt gehalten würden dann nur Daten die sich auf den jeweiligen Tab beziehen.

Wenn der Benutzer auf der Seite example.com erstmals eine Seite öffnet, erhält diese Seite eine ID. Diese ID muss der Server dann bei jedem folgenden POST (oder GET) erhalten. Sobald der Client die gleiche oder eine andere Seite in einem anderen Tab öffnet, muss diese auch eine neue ID erhalten.

Im Prinzip also ganz einfach, eine Session hat dann N verschiedene "Datensätze", jeweils einen pro Tab.

Phoenix 7. Okt 2013 17:41

AW: Getrennte Webanwendungsdaten je Browsertab
 
Zitat:

Zitat von mjustin (Beitrag 1231065)
Wenn der Benutzer auf der Seite example.com erstmals eine Seite öffnet, erhält diese Seite eine ID. Diese ID muss der Server dann bei jedem folgenden POST (oder GET) erhalten. Sobald der Client die gleiche oder eine andere Seite in einem anderen Tab öffnet, muss diese auch eine neue ID erhalten.

Im Prinzip also ganz einfach, eine Session hat dann N verschiedene "Datensätze", jeweils einen pro Tab.

Das ist relativ einfach zu realisieren: Du packst in das Formular auf der Seite einfach ein hidden field mit dieser ID.
Wir die Seite initial abgerufen wird die ID erzeugt und in das Formular geschrieben. Bei jedem weiteren Post wird die ID automatisch mitgesendet.

Bei GET wird das schwieriger, hier muss die ID an jeden Link angefügt werden. Was passiert aber nun, wenn der User beim Link, der einen GET ausführt, Ctrl gedrückt hält und dieser Link mit der ID von Tab 1 auf einmal in Tab 2 geöffnet wird?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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