2010-11-09 3 views
6

Mein Verständnis des Sitzungslebenszyklus in Ruby on Rails (speziell v3 und höher) ist, dass eine Sitzung zu Beginn einer Anfrage für jede Anfrage erstellt wird, und wenn diese Anfrage keinen vorhandenen Sitzungscookie enthält a es wird ein neues erstellt, andernfalls wird das Session-Cookie deserialisiert und im Session-Hash gespeichert.Ist es möglich, dass Rails-Sitzungen "just in time" erstellt werden?

Der Zweck dieses, natürlich, unterstützt eine Reihe von Sicherheitsfunktionen wie CSRF usw.

Dies ist jedoch ein bisschen ein Problem darstellt, wenn es mit HTTP-Cache-Diensten für das Caching von Seiten in einer Website kommt und Proxies wie Varnish, da die meisten Konfigurationen dazu neigen, diese (im Allgemeinen alle) Cookies sowohl auf der Anfrage- als auch auf der Antwortseite auszublenden (da der Cache normalerweise für eine verallgemeinerte Zielgruppe gedacht ist).

Ich weiß, dass es möglich ist, Varnish usw. einzurichten, um den Objekt-Hash mit den enthaltenen Cookie-Details zu erstellen, und dies würde die zwischengespeicherten Daten auf diese Sitzung (und damit diesen Benutzer) umfassen, aber ich frage mich, ob dies vollständig ist notwendig.

Ich habe eine Anwendung, die ziemlich "statisch" in der Natur ist - Inhalt wird aus einer Datenbank gezogen, in eine Seite gerendert, die dann zwischengespeichert werden kann - es gibt ein paar Elemente (wie Kommentaranzahl, 'recent' Elemente etc), die mit einer ESI hinzugefügt werden können, aber für jede Anfrage neigt Rails immer noch dazu, eine neue Sitzung zu erstellen, und wenn ein Benutzer bereits eine Sitzung hat, wird dieses Zeug vom Cache-Server entfernt.

Ich frage mich, ob es möglich sein könnte (über bereits vorhandene Funktionalität oder den Aufbau der Funktionalität selbst), um den Entwickler zu steuern, wenn eine Sitzung erforderlich ist, und nur wenn angegeben ist die Rück- und Weiterleitung mit Cookies, Session Initialisierung/Deserialisierung etc. notwendig.

Das, oder ich denke an diesem Problem den falschen Weg und muß das Problem aus einem anderen Blickwinkel adressieren ...

+0

Wenn Sie es einfach so lassen, wie es jetzt ist, und einen Ajax-Aufruf ausführen, um die "benutzerspezifischen" Teile der Seite zu laden, funktioniert das? –

Antwort

1

Wenn Ihre Website meist statisch ist dann mögen Sie vielleicht ganze Seite cac verwenden Hing. Dadurch werden die Anfragen vollständig aus der Anfrage entfernt und der Webserver kann sich damit befassen, sobald der Inhalt generiert wurde. Dies kann je nach den genauen Anforderungen zu ernsthaften Problemen führen, sofern der Kommentar zählt und benutzerspezifisch ist.

Verwandte Themen