将用户重定向到登录页面不起作用

时间:2014-05-06 06:23:10

标签: php

以下代码是我网站的主要索引页面。它在我的测试服务器上工作得很好 - 如果我没有登录,或者没有设置任何会话,我会将我重定向到登录页面。但是,我将它上传到我的实时服务器 - 它也在那里正常工作,直到我将index.php?X = 0& Y = 0的url更改为index.php。此时它只显示背景而没有其他内容。

直到今天早些时候,当我将所有内容重新上传到我的服务器时,一切都工作得很好,但是没有一个代码发生了变化,所以没有什么应该是不同的,但确实如此。所以,我想知道你们是否看到任何可能导致它的东西。

没有错误,页面无法正常加载。

<?php //* Something Wicked This Way Comes *//
require_once("lib/bootstrap.php");
$html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'.
        '<html xmlns="http://www.w3.org/1999/xhtml">'.
        '<head>'.
        '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'.
        '<meta name="description" content="Control the Universe!"/>'.
        '<meta name="keywords" content="game,web based, reddact, arg, story, gmz1023,elements" />'.
        '<title>Reddact</title>'.
        '<link rel="stylesheet" href="assets/style.css" />'.
        '<link rel="stylesheet" type="text/css" href="assets/css/tooltipster.css" />'.
        '<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>'.
        '<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>'.
        '<script src="js/jquery.tooltipster.min.js" type="text/javascript"></script>'.
        '<script src="js/TimeCircles.js" type="text/javascript"></script>'.
        '<script src="js/jquery.validate.min.js"></script>'.
        '<script src="js/js.js" type="text/javascript"></script>'.
        '<link href="favicon.ico" rel="icon" type="image/x-icon" />'.
        '<link rel="stylesheet" href="js/TimeCircles.css" />'.
        '</head>'.

        '<body>';
    echo $html;
if(!isset($_SESSION))
{
include('parts/login-page.php');
}
if(!isset($_SESSION['uid']))
{
    if(!isset($_GET['error']))
    {
        include('parts/login-page.php');
    }
    else
    {
        include('parts/login-page.php');
    }
}
if(isset($_SESSION['uid']))
{

        if(isset($_GET['mode']))
        {
            $file = 'parts/active/'.$_GET['mode'].'.php';
            if(file_exists($file))
            {
                include($file);
            }
            else
            {
                include('404.html');
            }
        }
        else
        {
            if(!isset($_GET['X']) && !isset($_GET['Y']))
            {
                header('Location:'.$_SESSION['index']); 
            }
            else
            {
                if(isset($_GET['portal']))
                {
                    include('first_time.php');  
                }
                else
                {
                include('starmap.php');
                include('nav-menu.php');
                }

            }
?>
</div>
</body>
</html>
<?php
        }
}
?>

2 个答案:

答案 0 :(得分:2)

这个区块:

        if(!isset($_GET['X']) && !isset($_GET['Y']))
        {
            header('Location:'.$_SESSION['index']); 
        }

是问题所在。输出任何内容后都无法更改标题。它通常不会被本地主机捕获,但肯定不会在实时服务器上运行。

尝试将echo $html;放在if-else语句系列之下的某个位置。

答案 1 :(得分:0)

<?php
html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'.
    '<html xmlns="http://www.w3.org/1999/xhtml">'.
    '<head>'.
    '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'.
    '<meta name="description" content="Control the Universe!"/>'.
    '<meta name="keywords" content="game,web based, reddact, arg, story, gmz1023,elements" />'.
    '<title>Reddact</title>'.
    '<link rel="stylesheet" href="assets/style.css" />'.
    '<link rel="stylesheet" type="text/css" href="assets/css/tooltipster.css" />'.
    '<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>'.
    '<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>'.
    '<script src="js/jquery.tooltipster.min.js" type="text/javascript"></script>'.
    '<script src="js/TimeCircles.js" type="text/javascript"></script>'.
    '<script src="js/jquery.validate.min.js"></script>'.
    '<script src="js/js.js" type="text/javascript"></script>'.
    '<link href="favicon.ico" rel="icon" type="image/x-icon" />'.
    '<link rel="stylesheet" href="js/TimeCircles.css" />'.
    '</head>'.

    '<body>';
echo $html;

然后在你说一些代码之后:

 header('Location:'.$_SESSION['index']); 

答案是:标题已经发送错误 必须设置标题 BEFORE 显示任何html内容

首先:标题

然后回显html

还要检查你的index.php?X = 0&amp; Y = 0是否有效(我假设这里是重定向)如果是这样,从逻辑上讲你的php.ini不显示错误,因为display_errors可能是0 也像我上面说的那样首先发送头文件(html)然后修改头文件(header())是不允许的。

所以你要做的就是将整个重定向if语句放在echo $ html之上;你应该没事......