标头功能在在线服务器上不起作用?

时间:2010-11-15 09:41:11

标签: php php-5.3

嗨,我只是不明白为什么我的代码不起作用。我正在为我的网站使用雅虎服务器。

这是我的注销代码。(在localhost上成功运行)但是当我在线上传此代码时,它无法正常工作。请帮忙

<?php  
//logout code

include("../Config.php");
if (!isset ($_SESSION['username']))
    {
header( 'HTTP/1.1 301 Moved Permanently' );
header('Location: ../index.php');

if (!headers_sent())
  { 
  header('Location: http://www.mysite.com/index.php');
  exit;
  }
    }
    else
    {

$_SESSION = array();
session_destroy();
session_unset();
header( 'HTTP/1.1 301 Moved Permanently' ); 
header('Location: ../index.php');

if (!headers_sent())
  { 
  header('Location: http://www.mysite.com/index.php');
  exit;
  }
}

?>

config.php文件包含会话代码(如启动会话)

3 个答案:

答案 0 :(得分:1)

您需要在标头中使用完整的URI,我建议在位置标头后面使用exit()。简单的注销不需要301标头。 并且don't use the closing tag in php。如果它在您的系统上运行,它看起来,至少有一个php文件(在启动php标记之前,或者在关闭php标记之后)有一些输出(可能只是一个空行),它似乎输出在PHP中启用了缓冲,它可以解决此错误,但在生产服务器上已禁用。

试试这个:

<?php
// for debugging purposes only, don't use on production server (just for debugging)
error_reporting(E_ALL);
ini_set('display_errors', 1);

//logout code

include("../Config.php");

if (isset($_SESSION['username']))
    session_destroy();

header('Location: http://www.mysite.com/index.php');
exit;

答案 1 :(得分:0)

  echo '<script type="text/javascript">
    function delayer(){
     window.location = "../index.php"
 }
 setTimeout("delayer()", 1000);

   </script>';

您可以将其替换为标头

答案 2 :(得分:0)

这将有效

<script type="text/javascript">
  window.location="http://www.newlocation.com"; 
</script>