# Sessions + Filter



## Gelöschtes Mitglied 16900 (14. Sep 2009)

Hallo,

ich hab mich heute ein wenig mit Sessions beschäftigt, allerdings ehrlich gesagt noch nicht alles genau verstanden. Viele legen bereits eine Session an, wenn man schon auf die LoginSeite kommt, aber ich hab das erst gemacht, nachdem man sich erfolgreich eingeloggt hat, weil ich sonst nicht weiß, wie man kontrolliert ob eine Session wirklich korrekt ist. Irgendwie fehlt mir aber trotzdem noch vor chain.doFilter eine SessionID-Abfrage oder so, aber mit request.isRequestedSessionIdValid(), falls das überhaupt richtig ist, funktionierts nicht.

Mein Filter sieht bis jetzt so aus:


```
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;
		HttpSession session = request.getSession(false);
		
		if (request.getParameter("loginSubmit") != null) {
			
			String username = request.getParameter("username");
			String password = request.getParameter("password");
			if (dbconnect(username,password) == true) {
				if (session != null)
				   session.invalidate();				
				session = request.getSession(true);
			}
		}	
		else if (request.getParameter("logoutSubmit") != null) {
			if (session != null)
				session.invalidate();		
		}
		
		if(session != null) {
			chain.doFilter(request, response);
		} 
		else {
			request.getRequestDispatcher("login").forward(request,response);
		}
	}
```

Ich hoffe mir kann jemand helfen

achja:

Wie kann ich in dem doFilter redirecten ohne dass eine Endlosschleife zustandekommt ? Mit Forward funktioniert das, allerdings seh ich dann in der URL mein ControllerHelper-Servlet und nicht das loginServlet, weils ja nur geforwarded wurde.

gruß
Farmy


----------



## Gelöschtes Mitglied 16900 (16. Sep 2009)

Ich hab jetzt folgendes implementiert. session.isNew() liefert doch nur dann true zurück, wenn die Session gerade erst erstellt wurde und dem Client noch nicht bekannt ist und request.isRequestedSessionIdValid() überprüft doch die Session mit dem Session Context oder ? Also könnte das doch so funktionieren oder?
Also funktionieren tut es, ich würd gerne wissen obs sicher ist...


```
if(session != null) {
	if (session.isNew()) {
		chain.doFilter(request, response);
		return;
	}
	else {
		if (request.isRequestedSessionIdValid()) {
			chain.doFilter(request, response);
			return;
		}
	}
}
request.getRequestDispatcher("login").forward(request,response);
```


----------



## Gelöschtes Mitglied 16900 (21. Okt 2009)

Ich hab nochmal ne allgemeine Frage ohne so wirklich auf meine ersten beiden Beiträge drauf einzugehen.

Man kann ja auch einfach immer ne Session erstellen und wenn sich jemand erfolgreich eingeloggt hat eine Attribut in die Session speichern, welches dieses festhält.

Allerdings hab ich mir jetzt die Mühe gemacht und nur dann ne Session erstellt, wenn man sich erfolgreich eingeloggt hat.
Als Abfrage, ob ein Benutzer erfolgreich eingeloggt ist, überprüf ich einfach nur, ob die SessionID valid ist.

Mein Problem dabei ist, ich kann keine jsp-Dateien benutzen, denn der jsp-Compiler erzeugt automatisch immer

```
session = pageContext.getSession();
```
was bedeutet, dass eine Session erstellt wird, wenn noch keine da ist.

Jetzt meine Frage, passiert sowas irgendwo noch öfteres ?, dass also getSession() oder getSession(true) aufgerufen wird, ohne dass ich das weiß ?

Weil wenn das so wäre, würd ichs sofort ändern...

Schöne Grüße
Farmy


----------

