# verliere Sessionvariable



## david (9. Sep 2004)

Hallo,

habe eine Javawebapplikation geschrieben. Dieser werden immer wieder Werte in die Session geschrieben und wieder ausgelesen.

So lange ich das lokal mache (Rechner und Server die selbe Kiste) funktioniert alles einwandfrei.

Wenn ich jedoch über ein Netzwerk auf die Seite zu greife, werden auf einmal Werte aus der Session nicht mehr gefunden (sind gleich null).

Woran kann das liegen?
Timeoutwert zu klein? Wenn ja, wo kann man den erhöhen?
Sessionpuffer zu klein? Wenn ja, wo kann man diesen erhöhen?

Muss man vielleicht explizit eine Sessionid übergeben? Wenn ja, wie macht man dies? Das Projekt wird mit Struts realisiert.

Bitte helft mir :bahnhof:  :bahnhof: 

Viele Grüße
david


----------



## akira (9. Sep 2004)

Hi,

sind vielleicht im Browser, der über das Netzwerk zugreift Cookies deaktiviert?

Wenn ja oder um sicher zu gehen würde ich URL-Rewriting benutzen, dabei wird im Fall das Cookies daktiviert sind, automatisch die Session-Id an die URL rangebastelt. Das erreichst Du mit:


```
String newUrl = response.encodeUrl(oldUrl);
```


----------



## foobar (9. Sep 2004)

akira hat gesagt.:
			
		

> Hi,
> 
> sind vielleicht im Browser, der über das Netzwerk zugreift Cookies deaktiviert?
> 
> ...



Die Methode encodeURL hat nichts mit URL-Rewriting zu tun. Unter Url-Rewriting versteht man die Vereinfachung von Urls  z.b.
http://www.foo.org/bar?baz=12345&quz=67890&sid=123456789 wird zu  
http://www.foo.org/b=12345/q=67890/s=123456789
Das hat ausserdem den Vorteil, daß dynamisch generierte Webseiten bei Google indiziert werden.


----------



## akira (9. Sep 2004)

Den Begriff URL-Rewriting scheint es mehrfach zugeben, meine Erläuterung ist in Bezug auf Servlets/JSP jedenfalls schon ok:


http://www.galileocomputing.de/op...170015.htm#Rxxjavainsel_170015280URLRewriting


----------



## Bleiglanz (13. Sep 2004)

> So lange ich das lokal mache (Rechner und Server die selbe Kiste) funktioniert alles einwandfrei.
> 
> Wenn ich jedoch über ein Netzwerk auf die Seite zu greife, werden auf einmal Werte aus der Session nicht mehr gefunden (sind gleich null).


Das ist definitiv totaler Unsinn. Einmal greifst du über http://localhost/foo/bar usw. auf die Webanwendung zu, einmal über http://hostname/foo/, und du willst uns weismachen, dass dieser Unterschied (der keinerlei Bedeutung für die Webapp hat) das Verhalten ändert?

1. Immer mit dem gleichen Browser?

2. Session ist natürlich immer eine andere - das ist dir schon klar?

3. wird in er Anwendung vielleicht der getRemoteAddr oder sowas verwendet?

4. Cookies eingeschaltet im Browser?


----------



## bronks (29. Dez 2004)

Super! Hier ist mein Beitrag sicher gut aufgehoben.   

Das worüber sich der David beklagt kommt mir irgendwie bekannt vor. Lokal funktioniert es und beim Hoster geht alles in die Hose und ich finde die Daten welche an der Session hängen auch nicht mehr wieder.

Hier der Code:


```
package IrgendeinPackage;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class Session extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
         
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("SessionID:" + request.getSession().getId());
        out.close();
    }
}
```

Den Link poste ich erstmal nicht, weil die Maschine gerade Down ist.

Der Code ist ja ganz simpel. Es wird nur die SessionID ausgegeben. Wenn man im Brower auf Aktualisieren drückt, dann erscheint eine andere SessionID und wenn man nocheinmal drückt, dann kommt wieder eine andere ... Lokal bleibt die SessionID, wie erwartet immer gleich. Stimmt am Code etwas nicht oder ist der externe Service etwas faul?

Lokal lauft Tomcat 5.5.4 und draußen läuft der Tomcat 4.1.27. 

Ich bitte um Eure Meinungen.

Danke!


----------



## Bleiglanz (30. Dez 2004)

schalte deinen Browser auf "Cookies individuell freischalten", geht mit Opera und Firefox problemlos

und schau dir an, wann und wo Session-Cookies daherkommen


----------



## bronks (30. Dez 2004)

Bleiglanz, danke für den Tip. Hab es gerade überprüft. Ja es kommt ein Session Cookie an. Jedes mal mit einer anderen SessionID. 

Es liegt am Hoster! Hab ich recht? 
Das sollte man Reklamieren! Richtig?


----------



## Bleiglanz (30. Dez 2004)

würde ich mal nicht drauf wetten

=> problem ist der "Reload" des Browsers

prüf mal mit etherreal, ob beim Reload dieser Cookie (der ja erst nach dem Aufruf geschickt wurde) wieder mitgeliefert wird

mit welchen Browsern hast du denn das bisher getestet?

mach mal 2 Servlets, und von Servlet 1 einen Link auf Servlet 2, und schau, ob dann bei Servlet zwei session.isNew() richtig ist


----------



## bronks (30. Dez 2004)

Hab es beim Hoster reklamiert und auch eine Antwort bekommen. Der Proxy ist daran schuld und ich soll die SessionID über die URL mitschicken. Na Super, da ist meine App endlich fertig und dann sowas.

Jetzt brauch ich echt hilfe, weil ich echt nicht weiß wie ich das dem Controller beibringen soll.

Folgendes steht im Controller:

```
HttpSession session = request.getSession();
        ViewerBean bean = (ViewerBean) session.getAttribute("viewerbean"); 
        if (bean == null) 
        bean = new ViewerBean(); 

... ... ... ... ....


        session.setAttribute("viewerbean", bean);
        RequestDispatcher dispatcher = request.getRequestDispatcher("viewerweb/dpviewer.jsp");
        dispatcher.forward(request, response);
```

In der JSP werden nur "jsp:getProperty" benutzt und sonst steht auch nicht viel drin. 

Wie bringe ich dem Controller jetzt bei, daß er sich die Session jetzt merken muß und die User nicht durcheinander bringt oder er sie sich selbst per Parameter schickt?


----------



## akira (30. Dez 2004)

Siehe ein paar Postings höher von mir:



> Wenn ja oder um sicher zu gehen würde ich URL-Rewriting benutzen, dabei wird im Fall das Cookies daktiviert sind, automatisch die Session-Id an die URL rangebastelt. Das erreichst Du mit:
> 
> 
> ```
> ...


----------



## bronks (30. Dez 2004)

akira hat gesagt.:
			
		

> Siehe ein paar Postings höher von mir:


Ja! Wie übertrage ich das in den Controller? Muß noch etwas in die JSP rein, damit auf die richtigen Sessiondaten zugegriffen wird?

Simple Beispiele, wo sich ein Servlet oder eine JSP über einen Link selbst aufrufen hab ich schon studiert. Mein Problem ist der Dispatcher und die Sache wie ich die Session behalte, wenn die Daten durch die JSP gelutscht wurden.


----------



## bronks (30. Dez 2004)

bronks hat gesagt.:
			
		

> akira hat gesagt.:
> 
> 
> 
> ...


@Bronks:
Nein, Du Depp! Der Controller kann so bleiben. Wennst Dein Hirn eingeschaltet hättest, dann wärst schon früher draufgekommen, daß man im Post an den Controller die "jsessionid" mitgeben muß. Und wenn Du nicht so ein verwirrter Trottel wärst, dann hättest Du gleich die "Jsessionid" mit einem ";" von der URL getrennt anstatt mit einem "?" und dann hätte es sofort funktioniert.  :lol:


----------



## Bleiglanz (31. Dez 2004)

> Hab es beim Hoster reklamiert und auch eine Antwort bekommen. Der Proxy ist daran schuld


spinn ich? was soll denn das für ein hoster sein? schmeisst der Cookies einfach weg???? 

BTW: am Controller musst du gar nichts ändern, das mit der URL und der Zuordnung klappt automatisch


> request.getSession();  // benützt den URL Parameter wenn nötig



leider musst du dafür ABSOLUT ALLE HYPERLINKS auf deinen Seiten vorher durch response.encodeURL jagen, dafür gibts nämlich KEINE Automatik...


----------



## bronks (31. Dez 2004)

Bleiglanz hat gesagt.:
			
		

> ... spinn ich? was soll denn das für ein hoster sein? schmeisst der Cookies einfach weg???? ...


Naja! Für das Jahr was ich im voraus gezahlt habe werde ich mir das noch anschaun, aber dann muß mich mir etwas überlegen ...


----------

