[JSP] Login über Javabeans funktion. Session wird nicht erstellt

Hydrano

Lieutenant
Registriert
März 2008
Beiträge
936
Hi,

im Rahmen einer Studienarbeit entwickel ich gerade eine Webanwendung, welche Daten aus einer Datenbank auslesen soll, dieser Part funktioniert soweit ganz gut.
Allerdings soll auch auch ein Session Handling vorhanden sein. Sprich es gibt eine Benutzerdatenbank und erst sobald sich ein registrierter Benutzer eingeloggt hat kann er auf bestimmte Daten der anderen DB zugreifen.

Leider bin ich gezwungen das ganze in JSP/Javabeans zu lösen. In PHP wäre es deutlich einfacher und schöner.

Die Problemmatik beim Login ist jetzt, dass ich mir zwar eine Rückmeldung hole ob das Login erfolgreich war oder nicht, wenn ich jedoch beim Fall des erfolgreichen Logins eine session erstellen möchte und auf eine andere Seite weiterleite, bin ich sofort wieder ausgeloggt.

Hier mal eben der Code meiner Login.jsp
Code:
<jsp:useBean id="login" class="model.Login" scope="session"/>
<jsp:setProperty name="login" property="user" value="${param.uname}" />
<jsp:setProperty name="login" property="pwd" value="${param.pass}" />

<script>
    if(${login.einloggen()}) {     
        <%
            session.setAttribute("user", "online");
        %>
        window.location = "../view/successIn.jsp";        
    } else {        
        alert("Login fehlgeschlagen");
        <%
            session.setAttribute("user", null);
            session.invalidate();
        %>
        window.location = "../../index.jsp";        
    }   
</script>

Ich rufe also in dem IF im JavaScript die Methode einloggen() aus meiner Java Klasse auf (einloggen liefert boolean zurück).
Die Methode funktioniert einwandfrei und bei erfolgreichen Login werde ich halt auf die Seite successIn.jsp geleitet, beim Fehlerhaften Login kommt die Meldung "Login fehlgeschlagen".
Das Problem muss also irgendwie an diesem session handling liegen. (In successIn.jsp prüfe ich ob eine session "user" schon vorhanden ist, deswegen merke ich auch das ich direkt wieder ausgeloggt bin)

Interessant ist jetzt noch der Teil im else:
Code:
<%
     session.setAttribute("user", null);
     session.invalidate();
%>
Wenn ich die Zeilen rausnehme dann werde ich immer erfolgreich eingeloggt, auch im Fehlerfall (einloggen() -> false).
Es scheint mir so als würde die Methode true und false gleichzeitig zurückgeben und somit die if und die else Bedingung erfüllen - was für mich aber irgendwie mehr als unlogisch scheint.

Vielleicht hat ja hier jemand eine Idee wo der Denkfehler liegt, ich wäre echt froh drum da ich hier schon seit stunden alles mögliche Versuche. Entweder geht es nicht, oder es geht auch im Fehlerfall :freak:
 
Dein Denkfehler ist, dass du Javascript und JSP Scriptlets vermischt. Denk mal darüber nach, wo (Client oder Server) welcher Code ausgeführt wird.

EDIT: Falls du es immer noch nicht siehst, ersetze mal in Gedanken "<%" durch "<?php" und und "%>" durch "?>". :)
 
Zuletzt bearbeitet:
Du hast die Funktionsweise der JSP noch nicht ganz verstanden. Außerdem mixt du Java und Javascript Code. Sämtlicher Java Code (das zwischen <% %>) wird ausgeführt, wenn aus der JSP ein Servlet gemacht wird. Dann wird die Seite erzeugt und an den Browser zurückgegeben. Und erst dann wird der Javascript code ausgeführt.

In deinem Fall wird also immer auch session.invalidate() ausgeführt, was dazu führt, dass die Session zerstört wird. Da das einloggen funktioniert hat steht nachher im Quelltext: if (true) ... und du wirst weitergeleitet.
 
T3rm1 schrieb:
Du hast die Funktionsweise der JSP noch nicht ganz verstanden. Außerdem mixt du Java und Javascript Code. Sämtlicher Java Code (das zwischen <% %>) wird ausgeführt, wenn aus der JSP ein Servlet gemacht wird. Dann wird die Seite erzeugt und an den Browser zurückgegeben. Und erst dann wird der Javascript code ausgeführt.

Ja das ist richtig mit JSP habe ich mich noch nicht besonders viel beschäftigt und es macht mir auch keinen Spaß, aber was sein muss, muss sein ;)
Soweit wie ich das jetzt verstanden habe muss ich die Funktion direkt im JSP aufrufen und auch dort überprüfen? - Ich werde mich mal daran wagen :)

Edit - Erfolgreich
War wirklich einfacher als ich jetzt erst dachte :freak:
Irgendwie bin ich aber nicht drauf gekommen das direkt im JSP zu machen, nun ja jetzt geht es ja und Danke für die Hinweise :D

Abschließend nochmal der funktionierende Codeausschnitt
Code:
<jsp:useBean id="login" class="model.Login" scope="session"/>
<jsp:setProperty name="login" property="user" value="${param.uname}" />
<jsp:setProperty name="login" property="pwd" value="${param.pass}" />

<% 
    if(login.einloggen()) {
        session.setAttribute("userid", "online");
        response.sendRedirect("../view/successIn.jsp");
    } else {  
        response.sendRedirect("../../index.jsp");   
    }
%>
 
Zuletzt bearbeitet:
Zurück
Oben