【问题标题】:PHP +redirecting with sessionsPHP +会话重定向
【发布时间】:2009-07-01 19:35:29
【问题描述】:

我正在尝试使用几种语言制作我的网站。每个页面都包含配置文件,它在会话中检查变量“lang”。如果不存在,将被重定向到语言选择页面。选择后你会来到之前的页面。但它仅适用于 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';
}
?>

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" />

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

谢谢。

【问题讨论】:

  • 我不认为这与启用/禁用 cookie 有关吗?抱歉,我对 PHP 了解不多,但这个问题让我很吃惊。
  • 别忘了,我在一台电脑上用其他浏览器测试过。只有 Firefox 可以正常工作。 (在所有浏览器中启用 cookie)
  • 将内容属性改为等待10秒而不是0,然后在页面上查看源代码,确保“URL=...”部分中的URL正确。
  • 嗯,好像脚本没有得到 lang-var...

标签: php session redirect


【解决方案1】:

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

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

另请注意,使用&lt;meta&gt; 标记进行重定向是discouraged by the W3C

【讨论】:

  • 我做了一些改变。现在它还会给出一个 302 标头,然后尝试使用 JavaScript 进行重定向,最后显示一个链接。如果这不起作用,也许你应该检查你的 PHP 错误日志,或者在文件顶部添加ini_set('display_errors', 'On');。请注意,ini_set() 仅在没有解析错误的情况下才有效。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      相关资源
      最近更新 更多