Was unterscheidet den IE vom Krümelmonster?

Ach ja, die Sesamstraße, das waren noch Zeiten, in denen das Kinderfernsehn durchgehend Klasse hatte. Naja, es gab auch in unserer Kindheit miese Sendungen, ich lasse mir die Verkärung meiner Vergangenheit nur ungern nehmen.
In gewisser Weise ist ein anständiger Browser ein Krümelmonster, denn er nimmt im Normalfall alle „Cookies“ gerne an. Natürlich kann man mit den entsprechenden Tools das Speichern von Cookies verhindern. Jemand der Cookies abschaltet, weis aber in der Regel, was er tut und wird sich wohl nicht wundern, wenn daraufhin die ein oder andere Internetapplikation nicht mehr richtig funktioniert.

Das alte Leid/Lied

Schlimm wird es, wenn ein User, der keine Ahnung hat, sich mit einer Einstellung die er nicht versteht die „Cookies“ abdreht. Zu diesem Schritt läd der nervigste Browser aller Zeit aber förmlich ein, nämlich mit seinen Sicherheitsstufen. Sicherheitsstufe klingt erst mal gut und hat was mit Sicherheit zu tun. Die erste Frage, die sich einem Denkenden aber stellen müsste, wäre, wieso ist die Sicherheitsstufe nicht immer auf Maximum, denn dann wäre doch alles zum Besten. Aber das nur am Rande.
Wer in Cookies ernsthaft eine Gefahr für den Datenschutz oder seine Rechnersicherheit sieht, der klebt sich hoffentlich auch seine Webcam ab und verzichtet auf WLAN.

Meine Aufgabe

Ich habe mit SilverStripe eine Internetapplikation programmiert, die in einem IFrame laufen soll. Über einen Cookie wurde die Spracheinstellung mitgeführt, die beim ersten Laden per GET-Parameter übergeben wurde. Da der IE auf der Sicherheitsstufe „Mittel“ keine Cookies von Drittseiten annimmt, war mein Lösungsansatz nachträglich mal wieder kompromittiert.

Meine Lösung

In Silverstripe gibt es eine Klasse HiddenField, mit deren Hilfe die Werte per POST-Parameter mitgeführt wird können.

if (isset ($_GET['sprache'])) {
   $fields->push(new HiddenField('sprache', null, $_GET['sprache'], $this));
 }
elseif (!empty ($_POST['sprache'])) {
   $fields->push( new HiddenField('sprache', null, $_POST['sprache'], $this));
 }

Ist beim ersten Laden der Seite ein Wert für $_GET['sprache'] vorhanden, so wird ein HiddenField mit dem entsprechenden Wert in das Formular eingefügt. Wird die URL jetzt ohne GET-Parameter neu geladen, so muss überprüft werden, ob es bereits ein HiddenField `sprache` gibt, das dann wieder mitgeführt wird.
Interessanterweise muss $_POST['sprache'] mit !empty() ausgewertet werden, da isset($_POST['sprache']) auch true zurückliefert, wenn $_POST['sprache'] leer ist.

Zur Spracheinstellung dient die Methode i18n::set_locale(). Da das eine Konfigurationseinstellung ist, müsste sie sematisch korrekt in der _config.php aufgerufen werden:

if (isset($_GET['sprache'])) {
        i18n::set_locale($_GET['sprache']);
} elseif (!empty($_POST['sprache'])) {
        i18n::set_locale($_POST['sprache']);
}

Ach so, es ist natürlich zu bemerken, dass das Codebeispiel sehr unsicher ist und mit entsprechenden Maßnahmen gegen das Einschleusen von Code abgesichert werden muss. Wie ich das gemacht habe, verrate ich nicht.

Die Quintessenz

Einige Leute behaupten Webdesigner/Webentwickler würden Geld mit den Problemen, die der IE in seinen verschiedenen Ausprägungne macht, verdienen. Wie ein mieses Auto, das ständig in die Werkstatt muss, die den Besitzer jedes mal abzinst. Aber ist das wirklich so? Das obige Beispiel beweist das Gegenteil. Den Fehler hat der Kunde gefunden. Der ist natürlich nicht bereit, für so etwas zu zahlen, was völlig verständlich ist. Ich arbeite drei Stunden für die Katz. Ich hätte es ja wissen müssen.

Ich kann die Geschichte nur unter Erfahrungen abbuchen. Beim nächsten mal bin ich schlauer. Man lernt dazu. Ich hätte lieber was sinnvolles gelernt.

Tags: