# sessions mit servlet oder jsp ?



## leo476 (9. Mai 2007)

Hallo,
ich brauche mal eure Hilfe.
Ich möchte in einer Website Sessions verwenden.
Habe als Controller ein Servlet gewählt und als View dann Jsp's.
Wenn ich jetzt Sessions vergeben möchte ist das sinnvoll das ganze dann in jede Jsp Seite zu bauen?

Oder kann am anfang irgednwie(ich weiss noch nicht wie) das Servlet aufgerufen werden das dann die Session vergibt ?
Wie mache ich das am sinnvollsten ??

Vielen Dank

Gruß Timo


----------



## Guest (9. Mai 2007)

Vieleicht geht es nur mir so, aber ich verstehe gerade nicht genau was du machen willst.

Könntest du dein Problem vieleicht etwas genauer beschreiben?


----------



## HLX (9. Mai 2007)

Sessions baut deine Servlet Engine für dich. Du kannst in JSP und im Servlet über request.getSession() darauf zugreifen.


----------



## shadow (9. Mai 2007)

Die Session wird nicht von einem Servlet vergeben, sondern du kannst die Session einfach verwenden, in dem du auf "session" zugreifst...

Wenn du also Objekte speichern willst, die nur für diese Session gelten sollen, kannst das einfach tun. Das Session-Objekt wird schon da sein.

Frag einfach nach, wenn das zu unklar sein sollte......


----------



## HLX (10. Mai 2007)

shadow hat gesagt.:
			
		

> Die Session wird nicht von einem Servlet vergeben



Richtige Antwort! Allerdings unschlüssige Begründung: die Session ist nicht da weil sie einfach da ist, sie ist da weil der Servlet Container vorher fleißig war.  :wink:


----------



## Ralf Ueberfuhr (10. Mai 2007)

Prinzipiell sollte man eine Session nur dann anlegen, wenn man sie das erste Mal braucht. Dies geschieht beim ersten Aufruf des Getters für die Session bzw. bei der ersten Verwendung von session in der JSP.

Für Überprüfungsfunktionen kann man das automatische Session-Anlegen unterbinden, indem man dem Getter ein false mitgibt, bzw. in der JSP in der Page-Direktive das Attribut session="false" angibt.


----------



## Chad (13. Jun 2007)

Bin mir nicht sicher, ob ich das richtig verstanden habe: 
Wenn ich also eine Webseite hab, mit Login die auf Servlets basiert.. dann bau ich mir ein Login Servlet, das eine Session erzeugt und in dem dann Username und PW abgefragt werden. Wenn diese aus der DB korrekt gelesen wurden, werden sie in der Session gespeichert. 
Alle anderen html Seiten die ich jetzt hab muss ich dann also als Servlet bauen, und ich kann in jedem Servlet aus einfach auf die beim Login erzeugte Session zugreifen und schauen ob der Benutzer dort als eingeloggt eingetragen ist?

Und falls dem so ist, wie bestimme ich dann, wie die Daten gespeichert werden? Ich weiß es gibt cookies und noch andere Methoden (URL rewriting?). Und welche Methode ist die vorteilhafteste? Hoffe ihr könnt mir weiterhelfen.


----------



## HLX (13. Jun 2007)

Chad hat gesagt.:
			
		

> Bin mir nicht sicher, ob ich das richtig verstanden habe:
> Wenn ich also eine Webseite hab, mit Login die auf Servlets basiert.. dann bau ich mir ein Login Servlet, das eine Session erzeugt und in dem dann Username und PW abgefragt werden. Wenn diese aus der DB korrekt gelesen wurden, werden sie in der Session gespeichert.


Das speichern der Benutzernamen an der Session musst du explizit selber tun:

```
request.getSession().setAttribute("User",BenutzerObject);
```



			
				Chad hat gesagt.:
			
		

> Alle anderen html Seiten die ich jetzt hab muss ich dann also als Servlet bauen,


Nein, ist nicht erforderlich. Die Sitzungsinformationen werden immer per HTTP zum Client übertragen und von dort aus auch wieder zurück - egal ob Java oder HTML.



			
				Chad hat gesagt.:
			
		

> und ich kann in jedem Servlet aus einfach auf die beim Login erzeugte Session zugreifen und schauen ob der Benutzer dort als eingeloggt eingetragen ist?


Genau:

```
request.getSession().getAttribute("User");
```



			
				Chad hat gesagt.:
			
		

> Und falls dem so ist, wie bestimme ich dann, wie die Daten gespeichert werden? Ich weiß es gibt cookies und noch andere Methoden (URL rewriting?). Und welche Methode ist die vorteilhafteste? Hoffe ihr könnt mir weiterhelfen.


Deine Daten werden im Server gehalten. Auf dem Client landet zunächst nur die Session-Id. Der Servlet Container entscheidet über die Art der Speicherung dieser Id. Wenn Cookies erlaubt sind, wird sie einem Cookie abgelegt. Ansonsten bleibt nur die Übertragung über die URL. Cookies werden bevorzugt, da die Anzeige der Session-Id im Browser einen kleinen Unsicherheitsfaktor mit sich bringt. Wenn die URL per Copy & Paste an jemand anderen weitergegeben wird, greift dieser auf die Session des kopierenden Benutzers zu.


----------



## Ralf Ueberfuhr (16. Jun 2007)

So wie ich das verstanden habe, willst du in deinen HTML-Seiten prüfen, ob der Benutzer eingeloggt ist?

Für sowas geb ich dir den Tip: Filter zur programmatischen Security-Umsetzung. Im übrigen brauchst du auch nicht zwingend ein LoginServlet, du kannst auch die J2EE-Security benutzen und Form-Based-Authentication verwenden. Das ist bei solch einfachen Dingen sehr gut machbar.


----------



## Rydl (18. Jun 2007)

und wenn du innerhalb deiner jsp objekte aus deiner session auslesen willst, dann kannst du dafür die expression language und tag-librarys benutzen - einfach, wo es sinn macht zum beispiel so: 


```
<c:if test="${sessioinScope.isLoggedIn == true}>du bist eingeloggt</c:if>"
```

schau mal nach der jstl api und doku:
http://java.sun.com/products/jsp/jstl/


----------

