我正在使用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对象对我来说不是一个好的解决方案,因为我丢失了所做的所有更改.
session_start()
在脚本的开头使用.您需要它来将服务器中的会话数据检索到$_SESSION
变量中.
来自http://php.net/manual/en/function.session-start.php:
session_start()根据通过GET或POST请求传递的会话标识符创建会话或恢复当前会话,或通过cookie传递.