Hallo,
ich beschreibe erstmal kurz was ich erreichen will und anschließend das eigentliche Problem:
Ich will in einer Web-Applikation die Anzahl der eingeloggten Besucher, sowie deren Namen anzeigen lassen. Dazu habe ich einen "SessionListener" erstellt, der mir die erstellten Sessions samt ihrer Id in einer Map speichert:
Dann habe ich eine Klasse, die den Usernamen/das Password überprüft. Diese Klasse erbt von "Filter" und hat somit die Methode "doFilter", die den Namen nach erfolgreichem Überprüfen in der Session speichert.
Wenn ich mir nun aber die Map vom "SessionListener" hole, haben die Sessions nicht die Variable "name" gespeichert, was wohl darauf zurückzuführen ist, dass die session.getId() in den beiden Klassen unterschiedlich ist. Kann mir jemand erklären, warum das nicht die gleiche Sessions in den beiden Klassen ist? Ich grübel hier schon den ganzen Tag herum und komme nicht drauf.
Viele Grüße
Luxury
ich beschreibe erstmal kurz was ich erreichen will und anschließend das eigentliche Problem:
Ich will in einer Web-Applikation die Anzahl der eingeloggten Besucher, sowie deren Namen anzeigen lassen. Dazu habe ich einen "SessionListener" erstellt, der mir die erstellten Sessions samt ihrer Id in einer Map speichert:
Java:
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class SessionListener implements HttpSessionListener {
public static Map<String, HttpSession> sessions = new HashMap<String, HttpSession>();
@Override
public void sessionCreated(HttpSessionEvent se) {
HttpSession session = se.getSession();
sessions.put(session.getId(), session);
System.out.println("session id "+session.getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
sessions.remove(se.getSession().getId());
}
public static Map<String, HttpSession> getSessions(){
return sessions;
}
}
Dann habe ich eine Klasse, die den Usernamen/das Password überprüft. Diese Klasse erbt von "Filter" und hat somit die Methode "doFilter", die den Namen nach erfolgreichem Überprüfen in der Session speichert.
Java:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httprequest = (HttpServletRequest)_request;
httprequest.getSession(true).setAttribute( "name", "abc" );
}
Wenn ich mir nun aber die Map vom "SessionListener" hole, haben die Sessions nicht die Variable "name" gespeichert, was wohl darauf zurückzuführen ist, dass die session.getId() in den beiden Klassen unterschiedlich ist. Kann mir jemand erklären, warum das nicht die gleiche Sessions in den beiden Klassen ist? Ich grübel hier schon den ganzen Tag herum und komme nicht drauf.
Viele Grüße
Luxury