Hallo,
ich habe ein paar grundlegende Fragen, ob mein Ansatz vom Prinzip her das tut, was ich will. Mir fiel kein eindeutigerer Betreff dazu ein...
Gegeben ist eine Webapplikation mit Login, Seiten mit privaten Daten, Logout, usw. via Sessions die mit der CGISESSID entweder per Query oder Cookie angesprochen werden.
Beim Login darf der Anwender angeben, wie lange die Session gültig sein soll, die expiration schreibe ich dem Cookie zu, der Session (beides geht bereits) und möchte dies auch für den Cache tun.
Wenn der Nutzer sich also nicht ausloggt, wovon auszugehen ist,sollen also sowohl Cookie als auch Session und die HTML-Seite ansich (!!) verloren gehen.
Ansatz 1: HTTP-Header per
print "Expires: $beliebigesekunden\n";
print "Content-Type: text/html\n\n"
und zur Sicherheit META-Tags
<meta http-equiv=”expires” content=”$beliebigesekunden″>
Frage 1: Wie sicher bzw. zuverlässig ist das? Kann ich noch mehr tun oder ist hier META sogar schon überflüssig?
Problem 1: Wenn sich der Benutzer vorher schon ausloggt, kann ich problemlos die Session zerstören und das Cookie löschen, aber wie erzähl ich in diesem Fall dem Brwoser bzw den Proxys, dass alle Seiten des privaten Bereichs die vorher besucht wurden, jetzt auch bitteschön gelöscht werden sollen? Ich befürchte das ist technisch schlicht nicht machbar.
Frage 2: Was also nun? Stimmt meine Befürchtung, so bleiben nach dem Ausloggen die Seiten im Cache. Ist es dann besser gleich allen Seiten ein no-cache zu geben?
Ansatz 2: per HTTP
print "Pragma: no-cache\n";
print "Cache-Control: no-cache\n";
print "Expires: 0\n";
print "Content-Type: text/html\n\n"
und per META
<meta http-equiv=”cache-control” content=”no-cache”>
<meta http-equiv=”pragma” content=”no-cache”>
<meta http-equiv=”expires” content=”0″>
Frage 3: Wie sicher bzw. zuverlässig ist das? Kann ich noch mehr tun oder sind hier einige Angaben sogar schon überflüssig?
Problem 3: Dies würde, wenn ich das richtig verstehe, dazu führen, dass er alle Elemente der Webseite nicht cached, oder? Das würde aber heißen, dass Bilder und Hintergründe und CSS-Styles, die ich für das Design des Interfaces brauche, auch nicht gechached werden, oder? Das wäre ja absolut doof, denn das würde die ganze Applikation extrem verlangsamen.
Frage 4: Kann ich das Cache-Verhalten so steuern, dass manche Bilder und Styles trotzdem gecached werden sollen, und der Text-Inhalt der Seite nicht gecached werden soll?
Auch dies kann ich mir technisch nicht vorstellen, wenn ich so die Funktionsweise vom Cachen im
Caching Tutorial überfliege..
Ansatz 3: Die Startseite bzw Loginseite meiner Webapplikation darf ja ruhig gecached werden, dort verwende ich auch alle Styles und Bilder die auf den restlichen Seiten verwendet werden.
Frage 5: Wenn ich obigen no-cache-Ansatz verwende, außer bei der Startseite, wo ich alles Cachen fröhlich zulasse, sind dann Proxy und Browser so schlau und verwenden die gecachten Dateien von der Startseite für die Bilder und Styles auf den privaten no-cache-Seiten?
Welche alternativen Lösungen gibt es für mich? Wie machen es proffessionelle Webapplikationen?
Danke schonmal für eure Hilfe :)