2017-10-26 3 views
0

Ich versuche, einfache Web-App mit Grails erstellen.Grals - wie neue Sitzung für verschiedene Browser-Registerkarten erstellen

Jetzt muss ich eine neue Sitzung erstellen, wenn der Benutzer dieselbe Seite in verschiedenen Registerkarten öffnet, um zu vermeiden, dass dieselben Daten in allen geöffneten Registerkarten angezeigt werden.

ist es möglich zu definieren, dass die Seite in einem neuen Tab geöffnet wurde? Wenn es möglich ist, wie neue Sitzung in Controller-Aktion erstellen ?.

oder vielleicht gibt es eine Möglichkeit, etwas wie Browser Tab-ID zu bekommen?

Antwort

2

Sie scheinen zu missverstehen, wie eine Sitzung funktioniert und sie zugewiesen sind.

Eine Sitzung ist pro Browser (und Domäne/Host).

So, auch wenn Sie eine neue Sitzung in einer Controller-Aktion erstellen können, wird es nicht helfen, da das die Sitzung für alle Registerkarten des Browsers wird und die vorherige Sitzung (en) wird ungültig/aufgegeben werden.

Es gibt keine Browser-Tab-ID.

Sie müssen das Root-Problem beheben, das dazu führt, dass Ihre Datenaffinität auf einer Browsersitzung basiert. Machen Sie es auf etwas anderes basiert. (Nur ein allgemeiner Vorschlag, da dies nicht Teil Ihrer Fragen ist und Sie keine Angaben gemacht haben.)

+0

In meinem Fall, wenn Benutzer auf eine Schaltfläche klicken, ein Teil der Daten generiert und wenn wir eine andere Registerkarte öffnen die Daten werden da sein, aber ich muss irgendwie identifizieren, dass es eine andere Registerkarte ist und keine Daten anzeigen, die previuosli waren Belastung. Ich dachte, als Session könnte mir helfen, aber ich falsch. Also, ich denke, zusätzliche URL-Parameter können helfen, aber nicht sicher. – Roman

0

Hier sind meine Gedanken dazu.

Was Sie versuchen zu erreichen, mag einfach erscheinen, aber Sie benötigen einen Mechanismus, um zu erfassen, wer jede Sitzung sei, ob es ein Frühling Sicherheitsbenutzername oder tatsächliche http Sitzungs-ID ist und dann mit dem was Controller-Aktionen sie so besucht haben und das ständig zu aktualisieren, während es immer wieder überprüft wird. Etwas so einfach wie

[ 
['10001':[controller:'someController', 'someAction'],[controller:'someController1', 'someAction1'], 
], 
['10002':[controller:'someController', 'someAction'],[controller:'someController1', 'someAction1'] 
] 

Wo ‚10001‘ Ihr Schlüssel Ihrer Karte und ist Ihre Session-ID enthält dann eine Liste der internen Karten der Orte besucht, dass Sie erfassen und versuchen, wenn sie schon dort zu arbeiten, schon - im Grunde ist die Frage hier ....

Wo ist die AI zu sagen, wenn sie someAction1 gesehen haben, sollten sie action2 sehen und was passiert, wenn sie action1 und action2 usw. auf einer endlosen Schleife von und was als nächstes gesehen haben ?

In beiden Fällen können Sie alles als Sitzungsvariable verwenden, die eine Karte wie oben enthält - das Problem, das Sie treffen, ist die gleichzeitige Karte (wo sie gleichzeitig aktualisiert und gelesen wird). Sie müssen dann über und in die gleichzeitige Verwendung von hashmaps suchen, um solche Probleme zu umgehen.

In jedem Fall ist das Problem mit allen oben genannten die konsequente Logik, um herauszufinden, ob sie alle möglichen Optionen dann gesehen haben, was als nächstes?

Ich denke, Sie sind weit besser davon, es aus einem anderen Blickwinkel zu betrachten als in Base es auf Zeitstempel und verschieben Sie die Abfrage oder was auch immer es ist, um eine andere Ausgabe basierend auf diesem Zeitstempel zu generieren, da das immer geht Änderung unabhängig vom Benutzer

+0

könnte es tatsächlich ein Inkrement sein, das für jede Sitzungs-ID gespeichert wird, also session.visited = (session.visited?: 0) +1 bei jedem Treffer des Controllers, wo Sie dann ändern rendern view = "index $ {session.visited} "und das öffnet dann index0.gsp index1.gsp index2.gsp und so weiter und das Inkrement entweder oben und Seiten beginnen von 1 oder unter Seiten beginnen von 0 als ein einfaches Beispiel – Vahid

Verwandte Themen