Frage Browser Tab/Fenster identifizieren

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

petrei86

Neues Mitglied
10 Dezember 2019
23
0
1
35
Hallo Leute

Ich arbeite an einem Webinterface welches der User mit einem Useraccount aber mehreren Instanzen nuten können soll.

Die User-Session löse ich mittels PHP-Session welche über ein Cookie wiedererkannt wird - Also ganz normal.

Nun möchte ich aber auch die verschiedenen, gleichzeig geöffneten Tabs oder Fenster unterscheiden können. Ursprünglich habe ich mi überlegt einfach bei jedem Link meine InstanzId als GET mi zu geben, ausser bei den _blank links.
Das Problem: Wenn der Benutzer mal einen normalen Link, also mit InstanzId mittels rechtsklick => neuer Tab öffnet, so habe ich zwei Tabs mit der selben InstanzId.

Daher meine Frage:
Komme ich pro Tab/Fenster zu einer eindeutigen Id welche ich verwenden kann?

Gruss petrei86
 

basti1012

Senior HTML'ler
26 November 2017
1.600
173
63
Minden
basti1012.de
So ganz verstehe ich das noch nicht. Mit Javascript kannst du neue Tags offenen und auch drauf zugreifen bzw identifizieren. In den Hauptfenster kannst du dann auch die Tabd wieder schließen wenn es sein muss . Vielleicht erklärst du mal was du vor hast oder Poster dein Code oder links zu deiner Seite
 

petrei86

Neues Mitglied
10 Dezember 2019
23
0
1
35
Kurz gesagt: Ich wünschte mir bei jedem https Aufruf (Screen und Ajax) die Information von welcher TabId diese kommt.
 

Sempervivum

Senior HTML'ler
18 Oktober 2016
2.406
462
83
68
Bin mir nicht ganz sicher, weil ich dein ganzes Umfeld nicht kenne, aber möglicher Weise könnte man das so lösen: Du verwaltest das, was Du TabId nennst, im Sessionstorage. Jedes Mal, wenn die Seite geöffnet wird, siehst Du dort nach welche IDs schon vergeben sind und vergibst für den aktuellen Tab eine neue. Im einfachsten Fall immer die nächst höhere. Dann hast Du eine ID, die Du in den Ajax-Anfragen mit an den Server schicken kannst. Der Pferdefuß: Dies ist kinderleicht zu manipulieren. Eine Möglichkeit, das abzusichern, indem man es z. B. serverseitig macht, fällt mir im Moment nicht ein. Man könnte daran denken, bei jedem neuen Öffnen eine andere Session-ID in PHP zuzuteilen. Aber wie soll der Server bei einer Anfrage durch Ajax wissen, zu welcher Session sie gehört? Diese Info müsste vom Client kommen, womit wir wieder am Anfang wären. Vielleicht hat da jemand noch eine bessere Idee.
 

petrei86

Neues Mitglied
10 Dezember 2019
23
0
1
35
@Sempervivum danke für deine Ausführungen. Wie du erkannt hast, hängt genau da der Haken.

Gibt der Browser im Header wirklich nirgends eine Information mit, welche mit über den verwendeten Tab/Fenster informiert?
 

basti1012

Senior HTML'ler
26 November 2017
1.600
173
63
Minden
basti1012.de
Gibt der Browser im Header wirklich nirgends eine Information mit, welche mit über den verwendeten Tab/Fenster informiert?
Schon, aber da kannst du nicht mit Internet darauf zugreifen.
Falls du was bauen willst, was nur für dich sein soll, dann erstelle dir ein Add-on.
In Chrom kann man die offenen Tabs hier sehen chrome://discards/
Bei anderen Browse geht das bestimmt auch, da habe ich mich noch nicht mit befasst.
 
Zuletzt bearbeitet:

sandreas

Neues Mitglied
29 April 2009
29
4
3
Das, was du vorhast, geht nur mit JavaScript... der sessionStorage ist normalerweise eindeutig pro Tab (wenn du den Tab klonst, nicht mehr)
Hier ein stark vereinfachtes, ungetestetes Beispiel, um das Prinzip zu verstehen:

  • Du erzeugst im Session-Storage eine random-ID
  • Sobald die seite aufgerufen wird, hängst du diese ID als Parameter an jeden Link, den man anklicken kann
  • Einschränkungen
    • Das ganze funktioniert dann nicht für Ajax-Requests oder andere JavaScripts und auch nicht für Formulare. Hier müsstest du entsprechend anpassen.
    • Wenn ein Tab geklont wird (vom User), dann müsstest du dir einen window onunload oder onbeforeunload handler schreiben, der das behandelt...
Javascript:
if(!sessionStorage.tabId) {
    sessionStorage.tabId = Math.random();
}


document.addEventListener("DOMContentLoaded", function(event) {
    document.querySelectorAll('a').forEach((a) => { a.setAttribute('href', a.getAttribute('href') + "?tabID=" + sessionStorage.tabID)});
});
 

Sempervivum

Senior HTML'ler
18 Oktober 2016
2.406
462
83
68
Das ist doch genau, was ich in #4 schon beschrieben habe und die Einschränkung, dass es leicht zu manipulieren ist, gilt genau so.
 
Werbung: