这是我的代码:
我的根目录是: root
位于root / index.php
的index.php文件<?php
require_once('root/includes/initialize.php');
<?php template('header.php', 'TITLE');?>;
?>
<div id="main">
//SOME CONTENT
</div>
我的initialize.php文件获取了我的所有核心包含文件,并将它们放入一个“require_once”。位于root / includes / initialize.php
<?php
//Define Path
defined('LIB_PATH') ? null : define('LIB_PATH', 'root/includes/');
//Core Functions
require_once(LIB_PATH.'functions.php');
//Core Objects
require_once(LIB_PATH.'_database.php');
require_once(LIB_PATH.'_session.php');
//Classes
require_once(LIB_PATH.'_user.php');
?>
更新**
我的functions.php文件包含一个简单的模板功能,可以抓取模板文件,例如我的header.php。它位于root / includes / functions.php
中<?php
//Templating
function template($path="", $pageTitle=NULL) {
if ($pageTitle != NULL) {
$_POST['page_title'] = $pageTitle;
}
include(root/public/templates/'.$path);
}
?>
我的_session.php文件负责我的会话控制。位于root / includes / _session.php
<?php
/**
* Class for Sessions
*/
class Session
{
public $logged_in = FALSE;
public $uid;
function __construct() {
session_start();
$this->check_login();
}
public function check_login() {
if (isset($_SESSION['uid'])) {
$this->uid = $_SESSION['uid'];
$this->logged_in = TRUE;
} else {
unset($this->uid);
$this->logged_in = FALSE;
}
}
public function logged_in() {
return $this->logged_in;
}
public function login($user) {
if ($user) {
$this->uid = $_SESSION['uid'] = $user;
$this->logged_in = TRUE;
}
}
public function logout() {
unset($_SESSION['uid']);
session_unset();
session_destroy();
redirect(WEB_ROOT);
}
}
$session = new Session();
?>
更新**
我的header.php占据了我网站中所有网页的顶部。位于root / public / templates / header.php中。这是我遇到问题的文件,我无法弄清楚为什么我无法在此文件中回显$ session-&gt; uid或$ _SESSION ['uid']。
<html>
<head>
<!--CSS-->
<link rel="stylesheet" type="text/css" href="root/public/css/style.css">
<title>MY SITE</title>
</head>
<body>
<div id="header">
<div id="logo">
<a href="root"><?php echo $_POST['page_title'];?></a>
</div>
<?php echo $session->uid;?> //DOESN'T WORK
</div>
我能够在我的index.php文件和我网站上的其他文件中回应一切,但不包含在header.php中。谁知道为什么?感谢。
答案 0 :(得分:2)
session_start()
。我看到你调用session_start()
的唯一地方是在一个文件中。
http://www.php.net/manual/en/session.examples.basic.php
<?php
session_start();
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}
?>
另请注意。我正在查看您的课程Session
,我没有看到任何地方也$mySession = new Session();
开始会话。
更新:
我在IDE中重新创建了基本的文件结构和代码,并通过在课程中添加此行来使其工作。
public function check_login() {
if (isset($_SESSION['uid'])) {
$this->uid = $_SESSION['uid'];
$this->logged_in = TRUE;
}
else {
unset($this->uid);
$this->logged_in = FALSE;
$_SESSION['uid'] = session_id();
/*Add this next line */
$this->uid = $_SESSION['uid'];
}
}
我第一次运行index.php只是标题工作的<?php echo $_SESSION['uid']; ?>
部分。刷新,<?php echo $session->uid; ?>
也起作用,所以它回应了两次。这告诉我你的班级没有将ID分配给一个类变量,希望这是我想要的结果,或者你可以根据需要调整它。
更新2:
功能文件(编辑以匹配您的路径,但您需要返回一个字符串)
<?php
//Templating
function template($path = "", $pageTitle = NULL) {
if ($pageTitle != NULL) {
$_POST['page_title'] = $pageTitle;
}
return "$path";
}
?>
然后在Index.php文件中添加以下方式:
<?php
require_once('initialize.php');
include(template('header.php', 'TITLE'));
//include('header.php');
?>
<div id="main">
//SOME CONTENT
</div>
</body>
</html>
_session.php文件:
<?php
/**
* Class for Sessions
*/
class Session
{
public $logged_in = FALSE;
public $uid;
function __construct() {
session_start();
$this->check_login();
}
public function check_login() {
if (isset($_SESSION['uid'])) {
$this->uid = $_SESSION['uid'];
$this->logged_in = TRUE;
}
else {
unset($this->uid);
$this->logged_in = FALSE;
$_SESSION['uid'] = session_id();
$this->uid = $_SESSION['uid'];
}
}
public function logged_in() {
return $this->logged_in;
}
public function login($user) {
if ($user) {
$this->uid = $_SESSION['uid'] = $user;
$this->logged_in = TRUE;
}
}
public function logout() {
unset($_SESSION['uid']);
session_unset();
session_destroy();
redirect(WEB_ROOT);
}
}
$session = new Session();
?>
并且header.php
<html>
<head>
<!--CSS-->
<link rel="stylesheet" type="text/css" href="style.css">
<title>MY SITE</title>
</head>
<body>
<div id="header">
<div id="logo">
<a href="root"><?php echo $_POST['page_title'];?></a>
</div>
<?php echo $session->uid; ?> //WORKS NOW
<?php echo $_SESSION['uid']; ?> //WORKS NOW
</div>
答案 1 :(得分:0)
这个问题很模糊。我的猜测是,自index.php
文件位于root/index.php
,然后是您的包含路径:
require_once('root/includes/initialize.php');
include('root/public/templates/header.php');
不正确。您不是以/
开头,因此路径是相对的,并且考虑到index.php
的位置,您包括root/root/includes/initialize.php
。如果是这种情况,您应该很容易发现您网页上缺少<title>MY SITE</title>
和<a href="root">TITLE</a>
。不是吗?
如果这是问题,我建议您定义某种HOME
常量,例如
define ('HOME', dirname(__FILE__));
// or define ('HOME', __DIR__); depending on your PHP version
这样你就可以包含与常量相关的所有内容
require_once(HOME . '/includes/initialize.php');
除此之外,我没有在您的代码中看到任何错误。