AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Getrennte Webanwendungsdaten je Browsertab
Thema durchsuchen
Ansicht
Themen-Optionen

Getrennte Webanwendungsdaten je Browsertab

Ein Thema von mjustin · begonnen am 7. Okt 2013 · letzter Beitrag vom 7. Okt 2013
Antwort Antwort
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#1

Getrennte Webanwendungsdaten je Browsertab

  Alt 7. Okt 2013, 15:33
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.
Michael Justin

Geändert von mjustin ( 7. Okt 2013 um 15:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#2

AW: Getrennte Webanwendungsdaten je Browsertab

  Alt 7. Okt 2013, 15:49
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Getrennte Webanwendungsdaten je Browsertab

  Alt 7. Okt 2013, 17:25
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.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#4

AW: Getrennte Webanwendungsdaten je Browsertab

  Alt 7. Okt 2013, 17:41
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?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  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 18:24 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