# Nur ein User für Web Application



## PollerJava (3. Sep 2010)

Hallo,

es ist vielleicht etwar ungewöhnlich, aber wir möchten nur einen User für unsere Web- Application erlauben bzw. es können mehrere User die Web-Seite aufrufen aber es kann nur einer (der erste User) eine Button clicken, um etwas zu spechern. Alle anderen User sollen beim Aufruf der Seite verständigt werden (einfache HTML- Text- Ausgabe), dass sie den Button nicht drücken können und der Button sollte deshalb auch grau hinterlegt sein.

Meine Frage wäre jetzt, wie ich das am Besten machen kann -> hab schon lange nichts mehr mit einer Session gemacht aber soweit ich mich errinnern kann könnte es mit einer Session funktionieren, oder wie würdet Ihr das lösen?
lg


----------



## Tomate_Salat (3. Sep 2010)

Ich bezweifel, dass man das über Sessions regeln kann, zumindest wüsste ich nicht, ob man jede auslesen kann (habe aber auch wenig im EE bereich gemacht bisher). Ich würde einen Datenbankeintrag erstellen. Du musst halt darauf achten, dass der Eintrag nicht unbedingt zurückgesetzt wird. Deswegen würde ich den Zeitlich begrenzen (z.B. ne halbe stunde in die Zukunft und der aktuelle Benutzer, der die Rechte hat, sendet dann alle 10min bsp. mit Ajax dass er noch arbeitet.)


----------



## Noctarius (4. Sep 2010)

Im Servlet eine statische Variable (z.B. einen AtomicInteger) nutzen, bei jedem Request hochzählen, wenn über X (in diesem Falle 1) Button deaktivieren


----------



## Cage Hunter (5. Sep 2010)

Oder ne Application Scoped Bean benutzen, jetzt kannst du dir was aussuchen^^


----------



## Noctarius (5. Sep 2010)

Cage Hunter hat gesagt.:


> Oder ne Application Scoped Bean benutzen, jetzt kannst du dir was aussuchen^^



Geht aber nur in App Servern mit JEE Unterstützung ^^


----------



## Tomate_Salat (5. Sep 2010)

Noctarius hat gesagt.:


> Im Servlet eine statische Variable (z.B. einen AtomicInteger) nutzen, bei jedem Request hochzählen, wenn über X (in diesem Falle 1) Button deaktivieren



Wie gesagt, bin mit EE nicht sonderlich vertraut, aber kannst du dabei auch darauf reagieren, falls der Nutzer sich nicht sachgemäß abmeldet? Ansonsten kannst du ggf den Button einmal nutzen und dann nie wieder :lol: (außer man startet das ganze neu oder greift sonst wie ein )


----------



## PollerJava (4. Okt 2010)

Noctarius hat gesagt.:


> Im Servlet eine statische Variable (z.B. einen AtomicInteger) nutzen, bei jedem Request hochzählen, wenn über X (in diesem Falle 1) Button deaktivieren



Das Problem dabei ist, wie ich die statische Variable wieder dekrementiere. 
Das muss ich dann wieder mit einer Session machen, oder wie hast du das gemeint?

lg


----------



## Noctarius (4. Okt 2010)

Nö einfach decrementieren. Siehst du doch in der Javadoc von AtomicInteger  Musst halt einen Logout-Mechanismus bauen.


----------



## PollerJava (4. Okt 2010)

>> Musst halt einen Logout-Mechanismus bauen

Das wird nicht viel bringen, wenn jemand den Browser einfach so zumacht ohne sich auszuloggen!


----------



## Noctarius (4. Okt 2010)

Dann stell entsprechend den Timeout ein oder benutzt das onUnload-Ereignis


----------



## PollerJava (5. Okt 2010)

Noctarius hat gesagt.:


> Dann stell entsprechend den Timeout ein oder benutzt das onUnload-Ereignis



Das mit der session- Timeout will auch nicht so richtig funktionieren, da dieses Timeout auch zieht, wenn der User noch nicht abgemeldet ist aber auch momentan nichts macht (keinen Button klickt -> also nicht mit dem Server kommuniziert).
Dass will ich ehrlichgesagt auch nicht, dass einer eine bestimmte Zeit nichts macht, und wenn er weitermachen möchte, dann geht es nicht mehr und er muss von vorne anfangen.
Oder meinst du ein anderes Timeout.


----------



## Noctarius (5. Okt 2010)

Nee meinte ich, kannst auch einen regelmäßigen Request per HttpXmlRequest abschicken um die Session aktiv zu halten oder eben beim schließen des Fensters einen Request schicken um den User automatisch abzumelden (falls er es noch nicht ist) - onUnload-Event.

Die Frage ist, was willst du bezwecken? Darf immer nur ein User gleichzeitig die Daten ändern? (klingt nach schlechtem Design) 

Zur Not kannst du auch die Session ID überprüfen und sehen ob es der selbe User ist, wenn nicht eine Meldung schicken. Aber um das Timeout / Abmelden Problem kommst du nicht herum. Außer sowas wie onUnload gibt es nichts wirklich Sicheres zum Überprüfen wann ein User weg ist.

Alternative wäre eventuell noch ein Long-Polling System (z.B. auf Basis von Welcome to CometD Project @ The Dojo Foundation | cometd.org ). Damit hast du einen relativ sicheren Weg um den Connection-Verlust zeitnah zu bemerken.


----------

