PHP+;使用会话重定向

PHP+;使用会话重定向,php,session,redirect,Php,Session,Redirect,我正在尝试用几种语言制作我的网站。每个页面都包含配置文件,其中检查会话中的变量“lang”。如果它不存在,wi将被重定向到页面。选择后,您将进入之前的页面。但它只适用于Mozilla Firefox。在其他浏览器中,在语言检查之后,我总是会看到这个页面(语言检查)。我做错了什么? 配置文件: // Here is session start... if (!isset($_SESSION['site_lang'])) { $_SESSION['page_refer'] = "http://"

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

// 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';
}
?>
//这里是会话开始。。。
如果(!isset($\u会话['site\u lang']))
{
$\u会话['page\u reference']=“http:/”$\u服务器['SERVER\u NAME']。$\u服务器['REQUEST\u URI'];
回声';
出口
}
其他的
{
需要_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'
  }
//会话开始
@摘录(元);;
如果(isset($_POST['lang']))
{
$lang=$_POST['lang'];$lang=replace($lang);
$\会话['site\u lang']=$lang;
回声';
}
其他的
{
//显示带有标志的表单…返回变量“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" />
一切都很好。有什么想法吗


谢谢。

尝试使用此选项执行重定向:

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

尝试使用此选项执行重定向:

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

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

echo '<script>window.location.href="',$_SESSION['page_refer'],'"</script>';
echo'window.location.href=“”,$”会话['page\u reference'],“;

如果设置位置标头无效,请尝试javascript重定向:

echo '<script>window.location.href="',$_SESSION['page_refer'],'"</script>';
echo'window.location.href=“”,$”会话['page\u reference'],“;

如果您使用标题('location:');基于重定向确保您在之后添加exit()或die(),因为程序将一直运行到最后,有些浏览器甚至可能不接受它,因此有时它可能会致命地危害安全性。

如果您使用header('location:');基于重定向确保您在之后添加exit()或die(),因为程序将一直运行到最后,而某些浏览器甚至可能不接受它,因此它有时会致命地危害安全性。

我想这与启用/禁用cookie无关?对不起,我对PHP的了解不多,但这让我很难受。别忘了,我在一台电脑上用另一种浏览器进行了测试。只有Firefox可以正常工作。(在所有浏览器中,Cookie都已启用)将content属性更改为等待10秒而不是0秒,然后在页面上查看源代码,以确保“URL=…”部分中的URL正确。嗯,这就像脚本没有获得lang-var…我想这与启用/禁用Cookie无关?对不起,我对PHP的了解不多,但这让我很难受。别忘了,我在一台电脑上用另一种浏览器进行了测试。只有Firefox可以正常工作。(在所有浏览器中,Cookie都已启用)将content属性更改为等待10秒,而不是0秒,然后在页面上查看源代码,以确保“URL=…”部分中的URL是正确的。嗯,这就像脚本没有得到lang-var…我做了一些更改。现在它还将给出一个302头,然后尝试使用JavaScript重定向,最后显示一个链接。如果这不起作用,也许您应该检查PHP错误日志,或者添加
ini_集('display_errors','On')到文件的顶部。请注意,
ini\u set()
只有在没有解析错误的情况下才能工作。我做了一些更改。现在它还将给出一个302头,然后尝试使用JavaScript重定向,最后显示一个链接。如果这不起作用,也许您应该检查PHP错误日志,或者添加
ini_集('display_errors','On')到文件的顶部。请注意,只有在没有解析错误的情况下,
ini\u set()
才会起作用。