In diesem Beitrag zeige ich, wie man auf statischen, gecachten Seiten dynamsiche Information der Art „Sie sind eingeloggt“ einblenden kann.
Mit der Verwendung des Squid als Reverse Proxy ist formel auch in Hochlast-Umgebungen einsetzbar; mit den flexibel regelbaren „Response Policies“ können Dokument-spezifisch individuelle Caching-Strategien eingesetzt werden. Geschützte Bereiche oder dynamische Funktionen werden einfach vom Caching ausgenommen. Will man aber auch auf den gecachten Seiten dynamische Informationen einblenden, so kann man sich mit einem Trick helfen: Man verwendet dynamische Images.
Da Images ja nicht mit der Seite ausgeliefert werden, werden diese auch nicht gecacht, sondern stets neu vom Server gezogen. Verwendet man nun einen Bild-Generator, so hat dieser Zugriff auf die Session und kann - je nach Zustand der Session - ein unterschiedliches Bild zurückliefern, welches die gewünschte Information visuell darstellt.
Damit dies klappt, muss natürlich das Caching des Bild-generators ausgeschaltet werden.
In der Seite sieht dies so aus:
img src="/generate/loggedInfo" border="0" height="43" width="66"
Der Bild-Generator loggedInfo kann so aussehen:
var isLoggedIn = req.getSession(true).getAttribute("user") != null;
var image;
if ( isLoggedIn )
image = path.parse( "/images/eingeloggt.gif" );
else
image = path.parse( "/images/ausgeloggt.gif" );
bild aus dem repository holen und content ausliefern..
Damit dies alles klappt, muss natürlich das Caching des Bild-Generators ausgeschaltet sein!
Die Funktionalität lässt sich sogar noch um Interaktionen erweitern.
Für eine Merkzettel-Funktionalität beispielsweise kann man das Image mit einem on-click-handler versehen, der die image-Url austauscht und mit der neuen URL CGI-Parameter übermittelt, die im Bildgenerator ausgewertet werden.