Wie feststellen, ob ein Benutzer noch auf meiner Seite ist

Status
Nicht offen für weitere Antworten.
T

toom_

Gast
Ich benutze für meine Website keine Cookies sondern merke mir eine eigens generierte Id für jeden angemeldeten Benutzer in einem hidden-Feld. Das wird bei jeder Serveranfrage mitgesendet. Auf dem Server ist im ServletContext eine Hashmap in der alle Daten des zur Zeit angemeldeten Benutzer gespeichert sind. Das funktioniert soweit ganz gut. Leider möchte ich irgendwie auch feststellen können, wann ein Benutzer meine Seite nicht mehr benutzt, damit ich diesen Benutzer aus der Hashmap entfernen kann. Weiß jemand mit welcher Methode ich das überprüfen kann, bzw. hat jemand einen Vorschlag wie man das realisieren könnte?
 

gex

Bekanntes Mitglied
Hallo toom_

Auf dem Server ist im ServletContext eine Hashmap in der alle Daten des zur Zeit angemeldeten Benutzer gespeichert sind.
Klingt mir eigentlich so ziemlich nach einem selbst gebauten "Session"-Scope?
Oder meinst du etwas anderes?

Falls nicht:
Du beziehst das Session Objekt mit
Code:
request.getSession();

Und links:
http://java.sun.com/javaee/5/docs/tutorial/doc/bnafo.html
http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpSession.html
 
T

toom_

Gast
Das was Du geantwortet hast mache ich gerade nicht. Ich dachte das wäre in meiner Frage deutlich formuliert. Nochmal: ich benutze keine Cookies und folglich auch kein Session-Objekt.

Meine Frage nochmal: Wie stellt man fest, dass ein Benutzer die Seite nicht mehr benutzt?
 
G

Gast

Gast
Noch ein Nachtrag: Mir ist prinzipiell klar, dass das der Webcontainer nicht leisten kann. Deshalb bräuchte ich sowas wie einen "Dämon" der jede Minute die Hashmap durchgeht und schaut wie lange auf jeden Eintrag nicht mehr zugegriffen wurde. Wurde auf einen Eintrag in der Hashmap zB 30Min lang nicht mehr zugegriffen, dann ist der Nutzer nicht mehr die Seite am nutzen. Wie kann man sowas realisieren?
 
S

SlaterB

Gast
das ist doch kein technisches Problem,

du kannst entweder auf dem Computer des Clients einen Trojaner installieren, der genau prüft, was da so wer macht,
wann der Browser ausgeschaltet wird,
musst dann aber immer noch mit Möglichkeiten wie Strom-/ Netzwerkausfall umgehen können,
also am besten eine eigene Stomversorgung + weltweites Satellitennetz dazu,

oder festlegen, dass nach x Min. ohne neue Anfrage nix mehr los

ein Logout-Button ist natürlich recht elegant, dann sagt dir der User, wann besonders doll Schluss ist

----


edit:
> Wie kann man sowas realisieren?

Thread oder Timer in Java, Zeitstempel
 
M

maki

Gast
Das was Du geantwortet hast mache ich gerade nicht. Ich dachte das wäre in meiner Frage deutlich formuliert. Nochmal: ich benutze keine Cookies und folglich auch kein Session-Objekt.
Deine Aussage ist an sich schon falsch, man braucht keine Cookies für Sessions, letzteres hat man immer.

Meine Frage nochmal: Wie stellt man fest, dass ein Benutzer die Seite nicht mehr benutzt?
Am Session timeout, HTTP ist zustandslos.
 

gex

Bekanntes Mitglied
Das was Du geantwortet hast mache ich gerade nicht. Ich dachte das wäre in meiner Frage deutlich formuliert. Nochmal: ich benutze keine Cookies und folglich auch kein Session-Objekt.
(Btw: es ginge mittels URL-Rewriting auch ohne Cookies)

Aber dann schau dir doch mal Quartz an, dort kannst du dir solche wiederkehrenden Tasks
anlegen.
http://www.opensymphony.com/quartz/

Dann machst du einfach in dein Objekt in der HashMap einen Timestamp rein, der die letzte Zugriffszeit einthält
(die du natürlich nachführst), dann kann dein Job auf dieses Property und deinem definierten Timeout testen.
 
S

SlaterB

Gast
> man braucht keine Cookies für Sessions, letzteres hat man immer.

ohne Cookies oder einem anderen automatischen Verfahren gibts auch keine automatische HTTPSession??
 
M

maki

Gast
ohne Cookies oder einem anderen automatischen Verfahren gibts auch keine automatische HTTPSession??
URL rewriting.

Cookies sind zwar zu bevorzugen, aber es geht auch ohne.

Ansonsten, ohne Cookies und ohne URL rewriting, würde ich mir genau überlegen ob man da nicht auf dem Holzweg ist.
Gibt dann zwar immer noch sessions, aber eben für jeden aufruf eine neue ;)
 
S

SlaterB

Gast
wurde ja schon genannt und du kannst nun nicht unterstellen, dass das der Originalposter (vielleicht unwissentlich) aktiviert hat,
also gibts auch keine Session (anzunehmenderweise),

ok, bis auf die neue pro Aufruf, nützlich ;)
 
M

maki

Gast
SlaterB hat gesagt.:
wurde ja schon genannt und du kannst nun nicht unterstellen, dass das der Originalposter (vielleicht unwissentlich) aktiviert hat,
also gibts auch keine Session (anzunehmenderweise),

ok, bis auf die neue pro Aufruf, nützlich ;)
Wenn Cookies nicht aktiviert sind, geift der Container automatisch auf URL rewriting zurück.

Der TS hat Servlets nicht/falsch verstanden und nun bastelt er für alles seine eigene, u.U. minderwertige Lösung ;)

Man kann übrigens auch über SSL Sessions gehen, aber über irgendetwas muss man nehmen und die Standardsession nutzen, kann ja nicht sein das man aus unwissenheit die halbe API selbst nochmal schreibt.

Denn wenn dem Standardweg (der richtige weg) begangen wird stellen sich viele Fragen gar nciht bzw. sind sehr einfach zu beantworten, in diesem Fall: javax.servlet.http.HttpSessionListener
 
T

toom_

Gast
@gex: Vielen Dank für den Hinweis. Das wäre genau das was ich suche.

@maki:
In einem anderen Forum hat mir jemand (ich denke mal erfahren, hat nämlich eine Firma die Internetseiten baut) davon abgeraten das Session-Objekt zu nutzen und statt dessen eine zufällige Nummer als BenutzerId bei jedem Request mitzuschicken und dann in einem Hidden Input Feld zu speichern. Die eigentlichen Nuterdaten werden auf dem Server gespeichert und mit der BenutzerId identifiziert.
Im Grunde hatte ich die Applikation genauso mit Session-Objekt aufgezogen, dann aber umgebaut nachdem ich die Empfehlung bekam. Das mit dem URL-Rewriting wusste ich leider nicht. Wo könnten dann Probleme auftreten, wenn man ein Session-Objekt verwendet?
 
M

maki

Gast
In einem anderen Forum hat mir jemand (ich denke mal erfahren, hat nämlich eine Firma die Internetseiten baut) davon abgeraten das Session-Objekt zu nutzen und statt dessen eine zufällige Nummer als BenutzerId bei jedem Request mitzuschicken und dann in einem Hidden Input Feld zu speichern.
Höre ich zum ersten mal.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben