# daten in session speichern



## hjm (7. Mrz 2005)

hallo!

ich habe ein problem mit dem speichern von daten in einer session:
also, auf der einen seite habe ich jsp files. in ihnen werden attribute wie folgt gesetzt bzw. abgefragt.

```
request.getSession().setAttribute("testobjekt", userDaten);
bzw. request.getSession().getAttribute("testobjekt")
```

hinter jedem jsp file steht eine Action Klasse (über struts verknüpft). in der perform methode greife ich dann folgendermaßen auf die attribute zu:

```
public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException
{
req.getSession().getAttribute("testobjekt");
req.getSession().setAttribute("testobjekt", userDaten);
...
}
```
soweit so gut. funktioniert mit einem anwender wunderbar.
steigen jedoch 2 anwender(unterschiedliche pcs) in das system ein überschreibt der 2. anwender alle attribute des ersten anwenders. 
ich speichere zb die userbean in der session, so wird zB ein gerade angemeldeter user A zum user B (wenn sich der user B anmeldet)

ich suche schon den ganzen tag nach einer lösung.

danke für eure hilfe[/code]


----------



## bronks (7. Mrz 2005)

Gerade mit Struts ist es unpassend in einer JSP so auf die Daten zuzugreifen, wie Du es im ersten Codeausschnitt machst.

Das Problem macht auf jeden Fall einen merkwürdigen Eindruck.

Was für einen Server benutzt du?

Log mal die SessionID mit während 2 User am System sind. Dadurch sollte sich des Rätsels Lösung recht schnell finden lassen.


----------



## hjm (7. Mrz 2005)

das wunderlichste dabei ist gerade, dass die session ids für jeden user anders sind!

außerdem tritt das problem nur bei klassen auf. (klasse ist auch nicht statisch)
wenn ich zB einen String in ein Session Attribut stelle, wird ernicht überschrieben.


----------



## bambi (7. Mrz 2005)

Also sorry, wenn ich mich jetzt mal so unqualifiziert hier einmische, aber ich habe da ein ganz aehnliches Problem.

Ich schreibe in meine Session eine JavaBean. Diese JavaBean enthaelt ein String-Array, einen
String und eine weitere JavaBean. Wenn ich das ganze mit mehreren Usern teste, dann ist die
JavaBean (in der 1. JavaBean) null. DIe anderen Werte sind da. Ich habe mal die Daten im Servlet
abgefragt, kurz befor ich sie an die JSP sende - alles da - kein Problem... Bin schon seit Tagen
am suchen...

Und jetzt meine unqalifizierte Frage - gebe zu, dass ich von JSP (fast) keine Ahnung habe: wie kann
ich denn die Session-ID auslesen?  :bahnhof:


----------



## bambi (7. Mrz 2005)

Okay - hab' die SessionId ausgelesen:

```
String sessionId = request.getRequestedSessionId();
```
Falls aber jemand 'ne Ahnung haben sollte, warum meine Daten teilweise(!) verschwinden... Bin fuer jede
Idee dankbar...


----------



## Bleiglanz (8. Mrz 2005)

>>außerdem tritt das problem nur 
>>bei klassen auf. (klasse ist auch nicht statisch) 

Du hast wahrscheinlich einen Fehler in der Programmlogik, woher kommt denn das Objekt "userDaten"??? Beachte, dass in der Session natürlich nur eine Referenz auf ein echtes Objekt am Heap gespeichert wird...



> Ich schreibe in meine Session eine JavaBean. Diese JavaBean enthaelt ein String-Array, einen
> String und eine weitere JavaBean. Wenn ich das ganze mit mehreren Usern teste, dann ist die
> JavaBean (in der 1. JavaBean) null. DIe anderen Werte sind da. Ich habe mal die Daten im Servlet
> abgefragt, kurz befor ich sie an die JSP sende - alles da - kein Problem... Bin schon seit Tagen
> am suchen...


Was ist denn das? Welche Bean? Was ist die "1. JavaBean"? Was sind "die anderen Werte" ???


----------



## bronks (8. Mrz 2005)

Bleiglanz hat gesagt.:
			
		

> ... Beachte, dass in der Session natürlich nur eine Referenz auf ein echtes Objekt am Heap gespeichert wird...


Wäre denkbar, daß garkein neues Objekt erstellt wird und immer das eine einzige gelutscht wird.

@hjm + bambi:
Postet mal ein bissl mehr Quälcode, in dem man sieht wie das Objekt erstellt und mit Daten gefüttert wird. An dem oben geposteten Code kann es nicht liegen.


----------



## Student (8. Mrz 2005)

hjm hat gesagt.:
			
		

> das wunderlichste dabei ist gerade, dass die session ids für jeden user anders sind!


Ist das nicht der Sinn der Sache?  ???:L


----------



## bambi (8. Mrz 2005)

Hi,

also wollte nur sagen, dass ich mein Problem jetzt geloest habe.

Also das Servlet, was ich verwendet habe, hat bereits existiert. Ich habe da nur ein paar Methoden geadded...
Das Problem: die HttpSession wurde als Instanzvariable in dem Servlet gespeichert. Die habe ich dann natuerlich
- so faul wie ich bin   :bae:  - gleich mal verwendet. 

In meinem Code muss ich fuer jeden Aufruf eine neue Session explizit in meiner Methode (wo ich die Attribute 
adde) erzeugen. Dann klappt's ohne Probleme - auch im load-Testing...

YEEESSSS - tagelanges suchen und 1000 Leute nerven ist endlich vorbei... Ab in's Release mit dem Zeugs...  :wink:


----------

