PHP +重定向会话

时间:2009-07-01 19:35:29

标签: php session redirect

我正在尝试用几种语言制作我的网站。每个页面都包含config-file,它会在会话中检查变量'lang'。如果它不存在,将被重定向到lang选择的页面。选择之后你会来到这个页面。但它仅适用于Mozilla Firefox。在语言检查后的其他浏览器中,我总是得到这个页面(lang检查)。我做错了什么? 配置文件中:

// 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'
  }

修改 如果有

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

在表单中它不能在其他浏览器中工作(除了mozilla) 但如果我使用:

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

一切都很好。有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:6)

尝试使用它来执行重定向:

<?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>';
?>

另请注意,使用<meta>代码重定向是discouraged by the W3C

答案 1 :(得分:0)

如果设置位置标题不起作用,请尝试使用javascript重定向:

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

答案 2 :(得分:0)

如果你使用标题('location:');基于重定向使确定之后你添加一个exit()或die(),因为程序将继续运行到最后,有些浏览器可能甚至不接受它,所以它可能致命地危及安全性场合。