标题重定向后会话变量消失(使用XAMPP,PHP)

时间:2014-03-12 06:06:56

标签: php session xampp session-variables

我已经搜索了很多Stack Overflow对这个问题的答案,似乎没有一个对我有用。

我已经安装了XAMPP 3.2.1并没有触及php.ini(好吧,我做了,但是因为它没有解决我的问题而改回来了。)

我的问题是会话似乎不能在php头重定向中存活。我试图在页面上中断脚本,设置会话变量并转储数组 - 它们正确设置。当我在重定向或甚至测试页面之后执行此操作时,$ _SESSION为空。

Cookie已启用,我已经检查过我有一个带有sessid的cookie(我这样做)。即使重定向,sessid也保持不变。

我觉得它与php.ini设置或使用localhost有关,因为我以前从未做过这些事情,而且我总是在使用外部托管方面取得成功。

是的,我在任何html标签之前都有session_start,甚至是doctype(它都在我将在所有页面上使用的header.php文件中。)

如果您需要,请在设置变量时使用以下代码:

        $_SESSION['username'] = $user['username'];
    $_SESSION['userlevel'] = $user['userlevel'];

我可以在会话中执行var_dump并在此之后直接死掉它并且它正确显示。然后,我做了几个函数调用,然后使用:

重定向
header('Location: '.LANDING_PAGE);

LANDING_PAGE等同于'/index.php'。会议现在不见了。当我在这个标题之前剪切脚本而不是指向测试页面除了session_start()和var_dump之外的其他任何事情,会话变量,同样的事情发生,没有会话变量 - 它说:

array(0) { }

我很难过。我错过了一些小事吗?谢谢你的帮助。

编辑1:

以下是相关代码:

    <?php
    require_once('McsBackendLibrary.php');
    $indexPage = new McsBackendLibrary;
    $indexPage->checkHandleErrors();
?>
    <div id="mainLogo">
        <img src="images/MLogo.png" />
    </div>
    <br />
    <form method="post" action="McsUser.php">
        <div class="accessClass">
            Username:
            <input type="text" name="username" class="accessClass" />
            <br /><br />
            Password:
            <input type="password" name="password" class="accessClass" />
            <br /><br />
            <input type="submit" name="submit" class="accessClass" id="accessSub" value="Login" />
        </div>
    </form>
    <br />
    <br />
<?php require_once('footer.php'); ?>

后端库是:

 <?php
error_reporting(E_ALL);

//McsBackendLibrary is a library of functions to be used on the webpages of MCS -- intended to separate code from design

    Class McsBackendLibrary {

        public function __construct() {
            require_once('header.php');
            }

        public function checkHandleErrors() {
            if (isset($_SESSION['fatalError'])) {
                echo '<div id="errorBox">'.$this->session->getSessionVar('fatalError').'</div><br />';
                unset($_SESSION['fatalError']);
                }
            }
        }
    ?>

和标题是:

    <?php
    require_once('McsUser.php');
    session_start();
    error_reporting(E_ALL);
?>
    <!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"
    xmlns:og="http://ogp.me/ns#"
    xmlns:fb="https://www.facebook.com/2008/fbml">
    <head>
    <title>MCS</title>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    <link rel="stylesheet" type="text/css" href="McsOpenStyle.css" />
    </head>
    <body>

因此,索引实例化一个backendlibrary对象,构造函数添加标题,标题包含任何HTML标记之前的session_start()。这是重定向的部分:

private function fatalError() {
$_SESSION['fatalError'] = $this->errorDescr;
$this->logError();
header("Location: test.php");
/*
if ($this->errorRefer != "HOME_PAGE") {
    header("Location: ".HOME_PAGE.constant($this->errorRefer));
    exit();
    }
header('Location: '.LANDING_PAGE);*/
exit();
}

正如你所看到的,我用一个标题来中断代码test.php只是var_dumps $ _SESSION而我什么都没得到。其余部分已被注释掉,但它通常是代码。

0 个答案:

没有答案