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();
            }
        }
    }