Aggiungo un po' di dettagli:
Codice PHP:
session_start();
if(isset($_POST['lang']))
$lang=$_SESSION['language']=$_POST['lang'];
else if(isset($_SESSION['language']))
$lang=$_SESSION['language'];
else if(isset($_COOKIE['prefs']['language']))
$lang=$_SESSION['language']=$_COOKIE['prefs']['language'];
else
$lang=$_SESSION['language']='en';
setcookie("prefs[language]",$lang,time()+2592000*12);
require("lang/$lang.inc.php");
In pratica stabilisco una variabile $lang per caricare il file con la lingua giusta e per varie altre scelte.
Questa variabile viene stabilita - in ordine di priorità - in base alla lingua scelta dall'apposito menu o in base alla lingua dell'attuale sessione (se presente) o in base al cookie; altrimenti si carica la versione inglese.
Ora se scade la sessione, o se l'utente torna per una seconda visita, viene scelta la lingua salvata nel cookie per un anno; come dice piero.mac:
Se la sessione scade perdi i dati memorizzati, pero' il tuo cookie dovrebbe mantenere la sua validita' fino alla scadenza prevista.
E con Firefox, Safari, Opera succede così; tutto abbastanza logico.
Ma con IE, allo scadere improvviso della sessione, riparte dalla lingua di default; e se vado a vedere i cookie, prefs[language] effettivamente non c'è!
Il cookie della lingua non è stato conservato; e lo stesso vale per quelli dell'autologin: l'utente si ritrova loggato fuori.
Succede a tutti i tester che usano IE; quindi escludo le impostazioni del browser.
Mistero...