Php 第2页未设置会话数据
我为处理会话创建了此类:Php 第2页未设置会话数据,php,session,Php,Session,我为处理会话创建了此类: # app/src/sessionHandler.php <?php namespace src; class sessionHandler { protected $_session; public function __construct() { session_start(); $this->_session = $_SESSI
# app/src/sessionHandler.php
<?php
namespace src;
class sessionHandler
{
protected $_session;
public function __construct()
{
session_start();
$this->_session = $_SESSION;
}
public function getSession()
{
return $this->_session;
}
public function getSessionVar($key)
{
return $this->_session[$key];
}
public function setSessionVar($key, $value)
{
try {
$this->_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)
{
unset($this->_session[$key]);
}
public function destroySession()
{
session_destroy();
}
}
在第2页工作,我可以看到bar2设置为foo2。我做错了什么?答案与我的班级有关,尤其是这一行:
$this->_session = $_SESSION;
如果我理解正确的话,它在\u构造中所做的事情并不是我所期望的。每次初始化会话时,它都会将$this->\u session
重新声明为一个新的$\u 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();
}
}
}
$sessionHandler->setSessionVar('foo2', 'bar2');
$foo2 = $sessionHandler->getSessionVar('foo2');
$varHandler->dumpVarR($foo2);
$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();
}
}
}