session trackung auf einfacher web-site

cable545

Aktives Mitglied
hallo,
ich habe auf einer einfachen Internet Seite eine User Verwaltung implementiert. Man kann sich also als User anmelden, registrieren, eigene Daten löschen und abmelden. Die Userdaten werden in einer XML-Datei verwaltet. Nun möchte ich aber, wenn sich ein User erfolgreich anmeldet, dass eine session für diesen User erstellt wird. Also egal wo er sich auf der Web-Site nach der Anmeldung befindet, es soll immer eine entsprechende Info auf der Seite zu sehen sein, ob man nun angemeldet ist, oder nicht. Meine An- bzw. Abmeldung wird über ein Servlet bewerkstelligt.
Hat vielleicht jemand einen Tip wie ich das ganze angehe?
 

cable545

Aktives Mitglied
ok, wenn sich der Benutzer angemeldet hat, wird ne session erstellt. Die Login Funktion läuft bei mir über ein Servlet. Wie kann ich denn jetzt auf einer normalen HTML Seite die Info ausgeben lassen ob der User angemeldet ist oder nicht?
 

cable545

Aktives Mitglied
Ich steh gerade auf dem Schlauch.???:L Eigentlich will ich mir doch auf meiner Homepage nur dynamisch anzeigen lassen, ob ich angemeldet bin oder nicht. So wie es hier oben rechts im Forum auch ist.
 
M

maki

Gast
Wie gesagt, du solltest mehr lesen, dir fehlt das grundlegende Verständnis.

Eine Session ist immer vorhanden wenn sich ein Browser mit einem Java Webapp verbindet, unabhängig davon, ob der User angemeldet/authentifizert ist.
 
N

nillehammer

Gast
Eine Session ist immer vorhanden wenn sich ein Browser mit einem Java Webapp verbindet,
Das stimmt so nicht. Erstmal ist keine Session vorhanden. Sie wird nur auf Anforderung der Webanwendung erzeugt. Z.B. durch so einen Code in der doGet-Methode des HttpServlet:
Java:
public void doGet(HttpServletRequest req, HttpServletResponse resp) {

  final HttpSession session = req.getSession(true); // true ist hier das Entscheidende
}
Was aber stimmt, ist dass das Vorhandensein einer Session (erstmal) noch nix darüber aussagt, ob ein Nutzer angemeldet ist, oder nicht. Im Gegenteil, es ist sogar gefährlich, nur auf das Vorhandensein der Session zu prüfen, weil Sessions gerne mal versehentlich erzeugt werden.

Ich würde in Deiner LoginPage eine Session erzeugen und ein UserData Objekt in die Session speichern, das z.B. den Nutzernamen enthält. In dem Code, der den Nutzernamen oben rechts anzeigt, liest Du diese Daten aus der Session dann aus.

In dem Code, der prüft, ob man angemeldet ist, prüfst Du erst auf das Vorhandensein einer Session und, wenn eine vorhanden ist, dann darauf, ob ein UserData Objekt in der Session gespeichert ist.
 
M

maki

Gast
Das stimmt so nicht. Erstmal ist keine Session vorhanden. Sie wird nur auf Anforderung der Webanwendung erzeugt. Z.B. durch so einen Code in der doGet-Methode des HttpServlet:
Das ist so leider nicht ganz richtig nillehammer.
Der Code den du zeigst erzeugt explizit eine neue session, d.h. aber nicht das vorher keine vorhanden war, einfach mal testen ;)

Der Servletcontainer braucht sessions um den Client zu indentifizieren, erzeugt werden die Session zwar nicht immer, spätestens aber dann wenn "man" eine braucht. Gut zu sehen in JSPs, diese erzeugen autom. eine falls keine vorhanden ist, schliesslich hat jede JSP zugriff auf das implizite Session Objekt, also wird in JSPs immer eine neue angelegt wenn keine vorhanden war. Bei Servlet kann man zwar besser eingreifen, aber auch da gilt: Wenn ein benötigt wird und keine vorhanden ist, wird eine erzeugt.
Eine reine HTML Seite zB. erzeugt nicht automatisch eine Session wenn sie vom Tomcat serviert wird.

Beim Rest stimme ich dir natürlich voll zu :)
 
N

nillehammer

Gast
Der Code den du zeigst erzeugt explizit eine neue session, d.h. aber nicht das vorher keine vorhanden war, einfach mal testen
Gut, da habe ich missverständlich ausgedrückt. Es hätte heißen müssen: Der von mir gepostete Code eine erzeugt Session, wenn noch keine vorhanden ist oder liefert die bereits vorhandene Session zurück.

Der Servletcontainer braucht sessions um den Client zu indentifizieren, erzeugt werden die Session zwar nicht immer, spätestens aber dann wenn "man" eine braucht.
Genau, aber, dass man eine braucht, muss man ihm "sagen". Zum Beispiel mit dem von mir geposteten Code. Möglichkeiten, die Erzeugung einer Session zu verlangen gibtes natürlich noch viele andere. Das ist auch der Grund, warum sie vielfach "aus Versehen" erzeugt werden. Am Ende ist es aber immer die Webanwendung, die die Erzeugung der Session antriggert. Der Container macht das nie von alleine.

schliesslich hat jede JSP zugriff auf das implizite Session Objekt, also wird in JSPs immer eine neue angelegt wenn keine vorhanden war.
Ja, aber nur in JSPs, die die auch tatsächlich auf die Session zugreifen und auch erst, wenn der Nutzer eine solche JSP aufruft. Z.B. wenn sie sowas hier enthält:
[XML]
<jsp:useBean id="userBean" scope="session" class="MeineUserBeanKlasse"/>
[/XML]
JSPs die nicht auf die (implizite) Session zugreifen, führen nicht dazu, dass eine erzeugt wird.
Bei Servlet kann man zwar besser eingreifen, aber auch da gilt: Wenn ein benötigt wird und keine vorhanden ist, wird eine erzeugt.
Hier schreibst Du es jetzt so, wie es richtig ist. Das heißt nämlich im Umkehrschluss, dass wenn keine benötigt wird, auch keine erzeugt wird. Was wiederum heißt, dass eben nicht immer eine erzeugt wird, wenn sich ein Browser mit einem Java Webapp verbindet.
 
Zuletzt bearbeitet von einem Moderator:

cable545

Aktives Mitglied
Ich würde in Deiner LoginPage eine Session erzeugen und ein UserData Objekt in die Session speichern, das z.B. den Nutzernamen enthält.
yap, genau so hab ich das gemacht
In dem Code, der den Nutzernamen oben rechts anzeigt, liest Du diese Daten aus der Session dann aus.
Und genau das ist jetzt mein Problem. Ich weiß nicht wie der Code aussehen soll, der oben rechts den Nutzername, oder wie auch immer, anzeigt. Denn ich hab ja die Homepage an sich nur im stinknormalen HTML geschrieben.
 

mjustin

Aktives Mitglied
Wenn die (statische) HTML Seite die Logindaten anzeigen soll, wäre - Javascript vorausgesetzt) eine Lösung mit einer Bibliothek wie jQuery machbar.

Mit jQuery.get() (jQuery.get() – jQuery API) kann ein Element der Seite dynamisch um HTML Code erweitert werden.

Im OnLoad des Dokuments wird dazu ein Servlet aufgerufen, das die Sessiondaten in ein HTML Tag umwandelt (z.B. <p>Eingeloggt als usertest</p>).

Voraussetzung ist, dass jQuery das Sessioncookie an den Server übermittelt. Läßt sich aber mit wenig Code schnell testen.
 

JanHH

Top Contributor
Irgendwie wäre die Info, wie Du die HTML-Seiten erzeugst, ganz sinnvoll. Also ich mein, man hat ja immer irgendeine Technologie zum Erzeugen von dynamischen HTML-Seiten, und sei es fest vercodeteter HTML-Code der vom Servlet erzeugt wird. Wie machst Du das? Deine Seiten scheinen ja auch dynamisch zu sein, ist ja auch logisch irgendwie zwingend notwendig bei Web-Anwendungen.

Wenn Dir das alles nix sagt, mal in JSF einarbeiten!?
 
Zuletzt bearbeitet:

mjustin

Aktives Mitglied
Hier ist ein Beispiel für den Header der statischen HTML Datei:

HTML:
<head>
        <title>ActiveMQ 5.5 and Tomcat 7 example application</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
        <script type="text/javascript">
            function getMsg() {
                $.get('./getlogindata', function(data) {
                    $('body').append(data);           
                }, 'html');
            }
        </script>
    </head>

jQuery ruft in der Funktion getMsg über $.get die Servlet-URL getlogindata auf, und diese liefert ein HTML Fragment das dann in diesem Beispiel an das Ende des Dokuments eingefügt wird.

Die getMsg Funktion kann über <body onLoad="getMsg();"> aufgerufen werden.
 

cable545

Aktives Mitglied
Die Homepage ist an sich nur ein Grundgerüst, in welches ich eine Userverwaltung einbauen sollte. Also "Anmeldung", "Abmeldung", "Registrierung" und "Löschen" von Usern.
Die Seite an sich hat weder irgendeinen Inhalt noch irgendeinen Sinn.
Es ging meinem Prof. nur darum eine Userverwaltung mittels JAXB, Servlets bzw. JSP zu entwickeln. Nun hab ich mir aber überlegt, ohne das es Bestandteil der Aufgabe ist, diesen dynamischen Inhalt, also die Info ob man angemeldet ist oder nicht, oben rechts anzeigen zu lassen.

Ich werd das mal ausprobieren mit JavaScript und der jQuery Bibliothek. Muss mich da mal kurz reinlesen. Aber danke für den Tip:toll:
 

JanHH

Top Contributor
Also die javascript-Version finde ich eher unnötig kompliziert. Eigentlich macht die ganze Aufgabenstellung keinen Sinn, wenn man nicht mit irgendeiner konkreten View-Technologie arbeitet, so simpel diese auch sein mag.

Dynamische Web-Seiten MÜSSEN irgendwie erzeugt werden, und die Information, ob man eingeloggt ist, und wenn mit welchem Namen, in die Seite einzubauen, ist trivial. Da mit jquery anzufangen kommt mir total übertrieben vor.
 
Zuletzt bearbeitet:

cable545

Aktives Mitglied
Das ist einfach ne Aufgabenstellung in einem Kurs "Web-Programmierung". Ne einfache Webseite per HTML welche dann eine Userverwaltung nutzt, welche mit JSP und Servlets implementiert ist.

Das mit diesem User-Login-Status war nur Interesse meinerseits. Wenn dieses Thema für Dich trivial erscheint ist das schön, für mich als Neuling, im Thema Web Programmierung, ist es das nicht. Ich bin Dir jedoch sehr dankbar über einen anderen Lösungsvorschlag
 

JanHH

Top Contributor
Naja wenn die Seiten per JSPs erzeugt werden, kann man den login-Status da ja einfach per jsp-Scriplet reinschreiben.. wobei ich noch nie direkt mit JPSs gearbeitet hab, aber trivial ist es definitiv. Halt so die JSP-Grundlagen.
 

JanHH

Top Contributor
Also, im Session Scope des Servlets fliegt halt eine Bean rum namens "loginStatus" (oder so), die das Servlet da platziert nach dem Login-Versuch. Diese Bean enthält Login-Status und Username. In der JSP kann man dann mit jsp:useBean auf diese Bean zugreifen. Oder so in etwa..

Ist auch fürs allgemeine Verständnis gut, denn quasi alle modernen java-Frameworks für Webanwendungen bauen auf irgendwelchen Beans, die in irgendwelchen Scopes sind, auf..
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Gleiche Session von EJB Container in JSF Container verwenden? Web Tier 21
R Session löschen Web Tier 3
J Session ist nach Klick auf Zurück-Button wieder aktiv Web Tier 3
jann Servlet Bei jedem Request wird eine neue Session erstellt. Web Tier 6
J Session Servlet - JavaScript Web Tier 6
M Session closed - und nun? Web Tier 1
F JSF synchronized(session) Frage ? Web Tier 1
F JSF p:selectOneMenu Session Web Tier 10
T JSF Problem wenn Session abgelaufen ist Web Tier 6
Q JSF bei Session-Timeout Weiterleitung auf spezielle Login-Seite Web Tier 15
D JSF Überprüfen der Session ID in JSF und JAVA Web Tier 9
R Servlet Resource laden für SMTP - Session Web Tier 4
B JSF Mojarra 2.1.5: java.lang.IllegalStateException: Cannot create a session after the response has been Web Tier 7
R JSF Session Handling Web Tier 3
X JSP Auslesen der Daten einer Session Web Tier 3
X Managed Bean Scope zwischen Request und Session gesucht Web Tier 6
crashfinger JSP Session verloren bei DNS Servernamen & IE Web Tier 6
F JSF Session-Kolision Web Tier 3
R Zugriff auf Session direkt auf JSF-Seite Web Tier 2
H JSF Session Initialisierung Web Tier 2
E JSP Browser Tab Session Web Tier 7
F Session Tutorial Web Tier 5
T JSP Session Login - Sicherheit Web Tier 4
J Loginbereich mit Session und Datenbank Web Tier 5
M 2 Cookies in der session (cocoon 2.2) Web Tier 4
F Richtiges Session Management mit Servlets Web Tier 4
P JSP: Liste in Bean über Session aufbauen Web Tier 6
7 Struts+AJAX- Session-Handling? Web Tier 2
B JSF session bean mit worker thread updaten Web Tier 7
J Crash bei session timeout Web Tier 3
M session Speicherort - ID ändern Web Tier 8
V ANFÄNGER : eigene Session Web Tier 3
V DatenbankConnection an Session hängen Web Tier 4
P session.removeAttribute Web Tier 3
K Orientierungslosigkeit: Webservice+Ajax(echo2)+Session-Management Web Tier 4
O struts - Gültigkeit einer Action an Session binden?! Web Tier 4
D JSF: Best Practice "Session invalidate nach Schließen des Browsers"? Web Tier 3
T Unbegrenzte Session Web Tier 14
D tapestry 5 session Web Tier 2
J Struts 2 session ID auslesen? Web Tier 5
M [J2EE] Session-Save Static-Objects? Web Tier 6
S Problem mit Session - Übergabe von Kontext zu Kontext Web Tier 2
F JSF: Beans in Session oder Request? Web Tier 4
H JSF - Bean (scope session) - Verfallsdatum? Web Tier 3
T Problem bei Session-Timeout Web Tier 3
M JSF refresh vs. session scope Web Tier 9
G Session in Servlet Starten und mit JSTL auslesen Web Tier 2
G Servlet - Von Parametern umstellen auf Session Web Tier 8
G jsf session erstellen Web Tier 10
rambozola session attribut in servlets und jsps Web Tier 11
M JSF session.invalidate() klappt nicht Web Tier 3
G Session.invalide() funktioniert nicht richtig Web Tier 2
G einfacher alert in jsf Web Tier 4

Ähnliche Java Themen

Neue Themen


Oben