PHP会话问题

0 php com session

我正在使用PHP的第三方COM对象,我希望将对象保存在会话变量中,以便在将来的服务器调用中访问它.

如果我在会话中保存对象:

$_SESSION['collItem'] = $collItem;
Run Code Online (Sandbox Code Playgroud)

我可以$_SESSION['collItem']在定义之后立即访问它的方法和属性.

但是,在将来调用服务器时,如果我尝试使用$_SESSION['collItem'],我就无法再次访问它.

我在这里写了一些代码来澄清.

在我的脚本"functions.php"中初始化COM对象的方法:

public function setAppData() {

    try {
        $appD = new COM('ASData.CASDataApp');
        $appD->InitMasterData(true, 1, 91);
        $appD->DateMask = 'ymd';
        $_readDB = $appD->InitApp($this->readDB());
    } catch (Exception $e) {
        $err = 'Connection error: ' . htmlentities(addslashes(strip_tags($e->getMessage())));
        $this->setError($err);
        return false;
    }

    $appD->appPath = str_replace('\app\include', '', __DIR__);

    $this->iniciarCollections($appD);

    $this->appData = $appD;
}
Run Code Online (Sandbox Code Playgroud)

从我的脚本"edit_json.php"调用方法:

require_once('functions.php');

if (!session_id()) {
    session_start();
}

// We recover $mbw object saved in session and initialize COM object
if (isset($_SESSION['mbw'])) {
    $mbw = unserialize($_SESSION['mbw']);
}
$mbw->setAppData();
$appData = $mbw->getAppData();
$_SESSION['appData'] = $appData;
Run Code Online (Sandbox Code Playgroud)

如果我在COM初始化后立即尝试访问$ _SESSION ['appData']我可以毫无问题地使用它,但是如果我在将来的服务器调用中尝试下一个代码(在$ _SESSION ['appData']中保存$ appData对象:

     if (!session_id()) {
        session_start();
    }
    $appData = $_SESSION['appData']; 
    // I can't work with $appData object if I don't initialize it again
Run Code Online (Sandbox Code Playgroud)

重新初始化COM对象对我来说不是一个好的解决方案,因为我丢失了所做的所有更改.

Gab*_*aru 6

session_start()在脚本的开头使用.您需要它来将服务器中的会话数据检索到$_SESSION变量中.

来自http://php.net/manual/en/function.session-start.php:

session_start()根据通过GET或POST请求传递的会话标识符创建会话或恢复当前会话,或通过cookie传递.