# jsf session erstellen



## Guest (15. Apr 2008)

hallo,

ich möchte einen ganz einfachen login realisieren ohne plausibilität. es geht nur darum eine session für den benutzer aufzubauen.

ich habe dazu einfach ein testprogramm erstellt, was einen namen bekommt und diesen in einer liste im applikationsbean speichert und zusaätzlich den namen in dem sessionbean als string speichert.


```
public class SessionBean1 extends AbstractSessionBean {
 
    String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
```

ich habe zwei seiten: page1 und page2. diese haben jeweils einen button um jeweils zu der anderen zu navigieren. zusätzlich habe ich 1 feld für einen namen einzutragen.


```
if(!getApplicationBean1().addLogedUser(textbox1.getText().toString())){
                error("sie sind bereits angemeldet!");
                return null;
            }

            getSessionBean1().setName(textbox1.getText().toString());
            System.out.println("Session wird initalisiert durch setzte der Property name");
            return "page2";
```

geht der benutzer jetzt auf den button1 auf page1 soll er zur seite 2 gelangen (return "page2"). und dabei soll der name auf seite 2 ausgegeben werden. dazu habe ich gedacht, das ich den namen in das sessionbean schreibe und dann ihn auf der 2 seite auslese. das funktioniert auch, nur leider werden wenn ich die url in 2 verschiedenen tabs im firefox aufrufe jeweils nur einmal das sessionbean angesprochen bzw erstellt (erkannt an der system.out.println("konstruktor session bean")).

nach meiner logik würde ich erwarten das jeweils eine session erstellt wird. ich scheine dabei aber einen fehler zu machen.

ist dieses sessionbean nicht dem einzelnen url aufruf zugewiesen wo es zum ersten mal benutzt wird?

vielen dank
und grüße
	
	
	
	





```

```


----------



## Guest (16. Apr 2008)

hallo,


ich hab ganz vergessen zu schreiben, dass ich netbeans 6 verwende   

danke und grüße


----------



## y0dA (16. Apr 2008)

Hi!
Das Problem liegt nicht an deinem Code, vielmehr am Browser!
Für ein geöffnetes Firefox Fenster inkl all seiner Tabs gibt es nur 1 Session, dh wenn du eine neue Tab aufmachst hast du keine neue Session sondern benutzt nach wie vor die Session des Fensters.


----------



## Atze (16. Apr 2008)

das ganze zieht sich über alle fenster des firefox, sogar über die downloadfenster. solange der firefox nicht komplett geschlossen ist, ist es die gleiche session


----------



## y0dA (16. Apr 2008)

Atze hat gesagt.:
			
		

> das ganze zieht sich über alle fenster des firefox, sogar über die downloadfenster. solange der firefox nicht komplett geschlossen ist, ist es die gleiche session



jo so meinte ich das auch - ist besonders spannend das einem kunden mitzuteilen, der es gewohnt ist in einer applikation mehrmals, mit verschiedenen benutzern, eingeloggt zu sein..


----------



## Guest (16. Apr 2008)

hi,

danke für eure schnelle antwort.
mmmm! ist aber gar nicht befriedigend. wie kann ich das den sonst sauber lösen? hat vielleicht jemand in der hnisicht noch ne idee?

grüße und danke


----------



## Atze (16. Apr 2008)

@y0dA:

kann der kunde ja, einmal mit dem explorer, einmal mit dem firefox, einmal mit opera ... 

@ gast:
ja, du hast die anwendung sicher in nem server laufen, oder? lass mich mal raten, in nem tomcat? dem tomcat kannst du aber sagen, wie lange er eine session aufrecht erhalten soll, bzw kannst mit bestimmten konfigurationen selbst die benutzer verwalten

informier dich mal über "Security Realms"


----------



## maki (16. Apr 2008)

Die Session wird nicht zwischen UNtersachiedlichen Instanzen des FF/IE geteilt.

Nur bei: Neuer Tab(CTRL+T, Neues Fenster (CTRL+N)

Öffnet man einen neuen Browser "richtig", bleibt die Session da wo sie hingehört.


----------



## Guest (16. Apr 2008)

hi,

@Atze: sehr gute idee mit den verschiedenen browsern 

aber das bringt mich auf folgende idee:

spontan werde ich es evt. so machen.

ich lese die sessionid aus und speichere die bei erfolgreicher anmeldung in dem sessionbean. wenn dann ein weiteres fenster geöffnet wird und die sessionid schon vergeben ist (was bei tags ja der fall ist), dann verweigere ich den zugriff, vielleicht mit einen redirect (weiß einer wie das geht?). sollte  eigentlich so gehen 

wenn ich zwei verschiedene browser auf habe werde ich dann das problem nicht haben, weil jeder browser seine eigene session und damit auch sessionid hat.

was halltet ihr von der spontanen idee?

grüße


----------



## maki (16. Apr 2008)

> ch lese die sessionid aus und speichere die bei erfolgreicher anmeldung in dem sessionbean. wenn dann ein weiteres fenster geöffnet wird und die sessionid schon vergeben ist (was bei tags ja der fall ist), dann verweigere ich den zugriff, vielleicht mit einen redirect (weiß einer wie das geht?). sollte eigentlich so gehen icon_smile.gif


Einen Servlet Filter schreiben ist der übliche Weg, deine Lösung würde wenn überhaupt nur mit JS umzusetzen sein.


----------



## Guest (16. Apr 2008)

hallo,

ich hab zu dem sessionbean nochmal ne frage.
dieses sessionbean was ich bei netbeans automatisch erhalte, hat ja eigentlich nicht wirklich was zu tun mit der eigentlichen session des browsers, oder? also der HttpSession klasse?
vielmehr wird dieses sessionbean von der HttpSession klasse initalisiert, oder? verstehe ich das richtig. 
das sessionbean enthält ja außer den callback methoden init(), activat(), passivate(), destroy() keine properties für die jsessionid.
die eigentliche session wird ja beim aufrufen der url erstellt, also mit jsessionid usw. und das sessionbean wird erst initalisiert, wenn dort daten in angelegten properties gespeichert werden.

vielleicht kann jemand noch kurz dazu stellung nehmen. damit ich weiß ob ich es richtig verstanden haben.

grüße und vielen dank. 

schönen feierabend an alle, die das lesen, und natürlich auch allen andern


----------

