# Session tracking mit URL rewrite - Session weg!



## Wyvern (30. Apr 2007)

Hallo

Woran kanns liegen, wenn ich bei einem klick auf eine ge-rewritete URL die gesamte Session verlier. Bei klicks auf nicht geänderte Links geht alles normal weiter. 

Meine encodeURL() sieht in etwa wie folgt aus:

```
private String encodeURL(String s) {
		if (!encrypt) {
			return s;
		}
		
String idStr = getIdString(s);
		 
		if (action.startsWith("showProductDetail")) {
			s = s.replaceAll("/shop", "");
			Product p = ProductProcessor.getProductByNumber(NumberFunctions.string2Int(idStr), countryCode, languageCode);
			if ( p == null)
				return idStr + ".html";
			return "/" + p.getName() + "-" + idStr + ".html";
		} else if (action.startsWith("showCategory")) {
			Category cat = CategoryProcessor.getCategoryByCatId(NumberFunctions.string2Int(idStr), countryCode, languageCode);
			if ( cat == null) 
				return s;
			s = s.replaceAll("/shop", "");
			if(countryCode.equals("CH"))
				return "/" + languageCode + "/" + cat.getTextURL() + "/";
			return "/" + cat.getTextURL() + "/";
		} else if (action.startsWith("showPage")) {
			s = s.replaceAll("/shop", "");
			return "/" + idStr + ".html";
		} else if (action.startsWith("changeCountry")) {
			s = s.replaceAll("/shop", "");
			return s;
		} else {
			// this link will not be encoded
			return s;
		}
	}
```

Die Links sehen genau so aus, wie sie aussehen sollen. Aber der verlust der Session ist bei nem Webshop fatal...


----------



## kleiner_held (30. Apr 2007)

Was nutzt Du für die Html-Ausgabe? Wenn Du Http-Servlets verwendest, kannst Du z.B. eine Hilfsmethode der HttpServletResponse verwenden.
HttpServletResponse.html#encodeURL(java.lang.String)


----------



## Wyvern (30. Apr 2007)

Ich hab die LinkTag etwas aufgebohrt. Ausgeben tu ich den Link dann per 

```
TagUtils.getInstance().write(pageContext, results.toString());
```


----------



## Marzel (30. Apr 2007)

Wenn ich das richtig sehe, schreibst du nirgends die session id in deinen Link. D.h. es ist klar, dass du da einen Session-Abriss hast. (Falls deine Session in einem cookie gespeichert wird, sollte das Problem mit dem Session-Abriss nicht auftreten.) Du solltest dennoch die bereits vorgeschlagene Methode encodeUrl des HttpServletResponse verwenden und dann anschließend das daraus erhaltene Ergbnis deinen Bedürfnissen anpassen.


----------



## Wyvern (29. Mai 2007)

Die Session wird in nem Cookie gespeichert. Hab nun die Ursache des Fehlers gefunden. 

Die Applikation liegt beim Tomcat in einem Unterverzeichnis. Durch das Rewrite wird das Unterverzeichnis allerdings entfernt. Das bedeutet, der Tomcat sichert die Session in einem Cookie im Applikationsverzeichnis. Nach dem Klick auf den gerewriteten Link wird das Sessioncookie allerings im Rootverzeichnis gesucht. Dort wird keins gefunden, und der Tomcat legt ein neues an. Allerdings wieder im Applikationsverzeichnis.


----------

