2009-04-13 7 views
4

In meiner Java EE-Anwendung habe ich ein Problem mit Sitzungen. Verschiedene Benutzer können sich bei der Anwendung anmelden und der angegebene Benutzer kann die Daten sehen, für die er berechtigt ist. Er sollte andere Benutzerdaten nicht sehen können. Um die Benutzer zu unterscheiden, verwenden wir Client_ID. Sobald sich der Benutzer anmeldet wir holen dieses Client_ID aus der Datenbank und es in der Sitzung wie diese Einstellung:Wie kann ich Sitzungen in Java EE verwalten?

session.setAttribute("Client_ID",user.getClient_ID()) 

Wir greifen auf diese Sitzungswert in der gesamten Anwendung und die entsprechenden Daten zu diesem Client_ID holen. Das funktioniert gut, wenn Benutzer in einem einzelnen Browser arbeiten, aber das Problem ist das:

Angenommen, es gibt einen SuperAdmin, der alle Clients unter ihm suchen muss. SuperAdmin meldet sich als client_1 und wieder als client_2 an. SuperAdmin hat sich beide Male mit demselben Browser angemeldet. Wenn ich den client_1 Browser aktualisiere, sehe ich die client_2 Details, die nicht passieren sollten.

Ich denke, unsere Anwendung verwendet die gleiche Sitzung für zwei verschiedene Logins im selben Browser. Was wäre eine Lösung für dieses Problem? Ich sollte die korrekten Daten für den bestimmten Client sehen, wenn ich die Seite aktualisiere.

Antwort

7

Verwenden Sie keine Cookies zum Speichern der Sitzungs-ID, sondern stattdessen Anforderungs-Parameter. So fordert jede geöffnete Registerkarte die eigene Sitzung an. Mit Cookies haben Sie nur einen Cookie für alle Tabs im Browser.

S.S .: Ich denke, dass es falsch ist, sich unter 2 oder mehr Benutzern gleichzeitig in einem Browser einzuloggen. Ihre Anwendung sollte erkennen, dass client_1 sie bereits signiert hat und die Anmeldung für andere Benutzer im selben Browser bis zum Abmelden widerrufen. Zum Beispiel funktionieren die Anwendungen von Google so. Auch wäre super, wenn SuperAdmin eine Funktion haben, um client_1 oder client_2 Daten ohne Anmeldung zu sehen. Dies rettet ihn/sie von Dutzenden von Passwörtern und erhöht die Leistung der Arbeit (Zeit ist Geld, nicht?).

+0

Absolut richtig, denke ich. –

1

Wenn Sie mehrere Registerkarten innerhalb der gleichen Browser-Instanz haben möchten, um verschiedene Dinge zu sehen, dann müssen Sie Ihre Sitzungsverwaltung und wichtige Dinge von der URL überarbeiten.

Die Sitzung wird zwischen den Browser-Registerkarten geteilt (gilt für die meisten Browser). Daher wirkt sich die Anmeldung mit einer Registerkarte auf die Sitzungen für andere Registerkarten aus.

1

Die Lösung besteht darin, Rollen anstelle mehrerer Logins zu verwenden. Sie geben die Rolle client_1 SuperAdmin und Client 2 nicht. Dies würde die Notwendigkeit einer doppelten Anmeldung reduzieren.

Aber in jedem Fall sollten Sie nur einem Benutzer erlauben, auf einmal angemeldet zu sein. Der Anmeldevorgang sollte die vorherige Sitzung ungültig machen. Ich vergesse den genauen Code in Java EE, aber es ist etwas wie session.invalidate().