Hallo,
normalerweise werden Sessions als Datenstrukturen auf dem Server verwaltet. Das bringt jedoch Probleme mit sich, die insbesondere in Clustern auftreten können. Die REST-Architektur sieht deshalb als radikale Lösung vor, überhaupt keine Sessions auf dem Server zu verwalten, sondern den Sitzungszustand ausschließlich auf dem Client zu verwalten. So lautet jedenfalls die Theorie.
Aber wie könnte man denn die Sitzung auf dem Client verwalten? Mir fallen dazu mehrere Möglichkeiten ein:
* Cookies - man muss von max. 4 KB je Cookie und max. 20 Cookies je Host ausgehen
* Versteckte Formularfelder - funktionieren nur bei POST, oder man muss alle Links zu Formularen machen.
* URL-Parameter - funktionieren mit GET und POST, aber die Länge ist stark begrenzt
* Man könnte mit AJAX immer auf derselben Seite bleiben und den Zustand mit JavaScript verwalten, allerdings würde der Benutzer dann immer die gleiche URL für verschiedene Seiteninhalte sehen.
Die AJAX-Lösung hätte technisch wohl die wenigsten Beschränkungen, würde aber zu dem erwähnten Nachteil mit den URLs führen und noch dazu JavaScript erzwingen. Da eh fast jeder JavaScript aktiviert hat, wäre wohl nur die Sache mit den URLs interessant, die stört mich dafür aber gewaltig.
Alle Links zu Formularen umzubauen, um versteckte Felder zu übertragen, halte ich auch nicht gerade für elegant. Zumal wenn man nicht in schlechtester JSF-Manier alles mit POST machen wollte, auch bei der Länge begrenzt wäre. Gleiches gilt natürlich auch für URL-Parameter, auch wenn sie per POST verschickt.
Da bleiben dann ja eigentlich nur noch Cookies mit ihrer Größenbeschränkung und der Gefahr, dass der Client sie nicht akzeptiert. Wenn man von 20 Cookies à 4 KB ausgeht, hätte man immerhin 80 KB für die Session. Das ist nicht wirklich viel, aber dicke Objekte haben in der Session eh nichts zu suchen. Aber was ist mit evtl. sehr lang laufenden Sessions, in deren Verlauf vielleicht sehr viele kleine Objekte (Ints, Strings ...) zusammen kommen? Damit könnte man dann auch an diese Grenze stoßen.
Hat damit jemand praktische Erfahrungen gesammelt? Welche Lösung hat sich bewährt, welche Probleme gibt es? Oder ist die Verwaltung der Session auf dem Client doch eher Theorie und in der Praxis kommt man um eine Session auf dem Server nicht herum?
normalerweise werden Sessions als Datenstrukturen auf dem Server verwaltet. Das bringt jedoch Probleme mit sich, die insbesondere in Clustern auftreten können. Die REST-Architektur sieht deshalb als radikale Lösung vor, überhaupt keine Sessions auf dem Server zu verwalten, sondern den Sitzungszustand ausschließlich auf dem Client zu verwalten. So lautet jedenfalls die Theorie.
Aber wie könnte man denn die Sitzung auf dem Client verwalten? Mir fallen dazu mehrere Möglichkeiten ein:
* Cookies - man muss von max. 4 KB je Cookie und max. 20 Cookies je Host ausgehen
* Versteckte Formularfelder - funktionieren nur bei POST, oder man muss alle Links zu Formularen machen.
* URL-Parameter - funktionieren mit GET und POST, aber die Länge ist stark begrenzt
* Man könnte mit AJAX immer auf derselben Seite bleiben und den Zustand mit JavaScript verwalten, allerdings würde der Benutzer dann immer die gleiche URL für verschiedene Seiteninhalte sehen.
Die AJAX-Lösung hätte technisch wohl die wenigsten Beschränkungen, würde aber zu dem erwähnten Nachteil mit den URLs führen und noch dazu JavaScript erzwingen. Da eh fast jeder JavaScript aktiviert hat, wäre wohl nur die Sache mit den URLs interessant, die stört mich dafür aber gewaltig.
Alle Links zu Formularen umzubauen, um versteckte Felder zu übertragen, halte ich auch nicht gerade für elegant. Zumal wenn man nicht in schlechtester JSF-Manier alles mit POST machen wollte, auch bei der Länge begrenzt wäre. Gleiches gilt natürlich auch für URL-Parameter, auch wenn sie per POST verschickt.
Da bleiben dann ja eigentlich nur noch Cookies mit ihrer Größenbeschränkung und der Gefahr, dass der Client sie nicht akzeptiert. Wenn man von 20 Cookies à 4 KB ausgeht, hätte man immerhin 80 KB für die Session. Das ist nicht wirklich viel, aber dicke Objekte haben in der Session eh nichts zu suchen. Aber was ist mit evtl. sehr lang laufenden Sessions, in deren Verlauf vielleicht sehr viele kleine Objekte (Ints, Strings ...) zusammen kommen? Damit könnte man dann auch an diese Grenze stoßen.
Hat damit jemand praktische Erfahrungen gesammelt? Welche Lösung hat sich bewährt, welche Probleme gibt es? Oder ist die Verwaltung der Session auf dem Client doch eher Theorie und in der Praxis kommt man um eine Session auf dem Server nicht herum?