PHP Sessions und Browser

Fatal Error wollte dir nur sagen, dass du es dir absolut kompliziert machst indem du die Daten erst in ein Cookie schreibst und dort wieder ausliest um sie in die Session zu packen, das ganze würde auch deutlich kürzer funktionieren:
PHP:
// Standardinitialisierung
if(!isset($_SESSION['language_x']))
    $_SESSION['language_x'] = 'en';

// Änderung
if(isset($_GET['lang']) && ($_GET['lang'] == 'de' || $_GET['lang'] == 'en'))
    $_SESSION['language_x'] = $_GET['lang'];
 
Ich muss doch erst schauen ob ich überhaupt ein Cookie absetzen kann. Den Code darunter, also das was du jetzt auch gepostet hast, das brauche ich eigentlich garnicht. Ich muss es aber haben wenn ich die Sprache aus einem Cookie an die Session übergebe möchte.

Ohne diese Cookie Geschichte funktioniert mein Language Switcher auch, ich brauche nur am Anfang die Session zu starten, alles andere regelt die Klasse. Ich brauche also die [lang] Abfrage sonst garnicht, das wird in der Klasse geregelt.

Ich brauche also praktisch nur das Cookie um den User den Klick auf seine Sprache zu ersparen wenn er wieder kommt. Denn, ohne Cookie ist die Sprache immer Englisch bzw. Deutsch jedoch nur für die Session.
 
Kann auch sein, dass ich mich gerade irre aber wenn man sich den Code ansieht passiert ja folgendes:

Du überprüfst ob ein Cookie da ist und setzt dann sie Session. Danach schaust du erst ob der GET-Parameter gesetzt ist und setzt das Cookie. Also müsste beim ersten Aufruf die Session nicht gesetzt werden da noch gar kein Cookie existiert! Das erstellst du erst weiter unten und somit gibts das dann erst beim nächsten Request. Wenn dein LanguageSwitcher mit der Session Variable arbeitet gibts eben beim ersten Aufrug mit dem &lang=... keine Sprachveränderung.

---

Das Cookie kannst du ja parallel erstellen zur Session. Aber generell ist es nicht notwendig für die Sprachwahl eine Session zu verwenden. Du kannst doch mit dem GET-Parameter "lang" weiterarbeiten. Und wenn du willst, dass der Benutzer die Sprache behält auch wenn er &lang=.. nicht stehen hat dann kannst du noch immer das Cookie setzen.
Der Hintergrund ist folgender: Wenn der User Cookies deaktiviert hat, kann er bei deiner Lösung die Sprache nie verändern. Bei der Lösung mit GET-Parameter kann er seine Sprache dann zwar nicht dauerhaft speichern, aber er kann sich die Seite ja mit dem &lang=.. bookmarken etc. Und er kann die Sprache auch ändern wenn er Cookies deaktiviert hat.
 
Zurück
Oben