2009-07-01 9 views
0

J'essaie de faire mon site avec quelques langues. Chaque page comprend un fichier de configuration, qui vérifie la variable 'lang' en session. Si ce n'est pas le cas, vous serez redirigé vers la page de choix de la langue. Après avoir choisi de venir à la page avant. Mais cela ne fonctionne que dans Mozilla Firefox. Dans un autre navigateur après la vérification de la langue, je reçois toujours cette page (vérification des langues). Qu'est-ce que j'ai fait de mal? Config fichier:PHP + rediriger avec des sessions

// Here is session start... 
if (!isset($_SESSION['site_lang'])) 
{ 
    $_SESSION['page_refer'] = "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 
    echo '<meta http-equiv="Refresh" content="0; URL=lang_choose.php">'; 
    exit; 
} 
else 
{ 
    require_once 'languages/'.$lang.'.php'; 
} 
?> 

lang_choose.php:

// Session start 
    @extract($_POST); 
    if (isset($_POST['lang'])) 
    { 
    $lang = $_POST['lang']; $lang = replace($lang); 
    $_SESSION['site_lang'] = $lang; 
    echo '<meta http-equiv="Refresh" content="0; URL='.$_SESSION['page_refer'].'">'; 
    } 
    else 
    { 
     // Showing form with flags... which returns var 'lang' 
    } 

EDIT: S'il y a

< input type="image" src="img/langs/en.png" width="290" height="200" border="1" name="lang" value="en" /> 

sous forme, il ne fonctionne pas dans un autre navigateurs (sauf mozilla) mais si j'utilise:

< input type="submit" name="lang" value="en" /> 

Tout est bon. Des idées?

Merci.

+3

Je ne suppose pas que cela a à voir avec les cookies étant activé/désactivé? Désolé, je ne connais pas vraiment le PHP, mais ça m'a déjà mordu. –

+0

et ne pas oublier, que j'ai testé dans 1 ordinateur avec un autre navigateur. Seul Firefox fonctionne normalement. (dans tous les navigateurs, les cookies sont activés) – Ockonal

+0

Modifiez l'attribut de contenu pour qu'il attende 10 secondes au lieu de 0, puis effectuez une source de vue sur la page pour vous assurer que l'URL de la partie "URL = ..." est correcte. –

Répondre

6

Essayez d'utiliser ceci pour effectuer la redirection:

<?php 
header('HTTP/1.1 302 Found'); 
header('Location: ' . $_SESSION['page_refer']); 
// And just in case that doesn't work 
echo '<html>', 
    '<head>', 
    '<title>Redirect</title>', 
    '</head>', 
    '<body>', 
    '<script type="text/javascript">', 
    'window.location.href = "' . $_SESSION['page_refer'] . '";', 
    '</script>', 
    '<a href="' . $_SESSION['page_refer'] . '">Click here to continue</a>', 
    '</body>', 
    '</html>'; 
?> 

Notez également que l'utilisation de la balise <meta> pour rediriger est discouraged by the W3C.

+0

ça n'aide pas = ( – Ockonal

+0

J'ai fait quelques changements. Maintenant, il va aussi donner un en-tête 302, puis essayer de rediriger en utilisant JavaScript, et finalement afficher un Si cela ne marche pas, peut-être devriez-vous vérifier votre journal des erreurs PHP, ou ajouter 'ini_set ('display_errors', 'On');' en haut du fichier Notez que 'ini_set()' ne fonctionnera que s'il n'y a pas d'erreurs d'analyse. –

0

Essayez redirection JavaScript si le réglage l'en-tête de l'emplacement ne fonctionne pas:

echo '<script>window.location.href="',$_SESSION['page_refer'],'"</script>'; 
0

Si vous utilisez en-tête (« emplacement: »); les redirections basées font sûr vous ajoutez ensuite un exit() ou un die(), car le programme continue jusqu'à la fin, et certains navigateurs ne l'acceptent même pas, ce qui peut fatalement compromettre la sécurité à certaines occasions.

Questions connexes