答案与我的课有关,尤其是这一行:
$this->_session = $_SESSION;
如果我理解正确的话
__construct
不是我想的那样。每次初始化会话时,它都会重新声明
$this->_session
作为一个新的
$_SESSION
-重写每页上的数据。
我把班级改成:
<?php
namespace src;
class sessionHandler
{
protected $_sessionId;
public function __construct()
{
if (!isset($_SESSION)) {
$this->init();
}
}
public function init()
{
session_start();
$this->_sessionId = session_id();
}
public function getSessionVar($key)
{
return (isset($_SESSION[$key]) ? $_SESSION[$key] : 'no data found in session for key: '. $key);
}
public function setSessionVar($key, $value)
{
try {
$_SESSION[$key] = $value;
} catch (\Exception $e) {
require_once $_SERVER['DOCUMENT_ROOT']. '/app/src/errHandler.php';
$errHandler = new errHandler(5, $e->getMessage());
$errHandler->logErr();
}
}
public function unsetSessionVar($key)
{
if (isset($_SESSION[$key])) {
unset($_SESSION[$key]);
} else {
return false;
}
return true;
}
public function destroySession()
{
try {
session_destroy();
} catch (\Exception $e) {
require_once $_SERVER['DOCUMENT_ROOT']. '/app/src/errHandler.php';
$errHandler = new errHandler(5, $e->getMessage());
$errHandler->logErr();
}
}
}
所以它使用已经存在的
$会话
数据。现在第2页可以看到第1页声明的内容。