我已经搜索了很多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而我什么都没得到。其余部分已被注释掉,但它通常是代码。