如果它是一个不占用太多内存并且可序列化的小对象,您可以将其存储在会话中:
function getSessionObject($objectName, $params){
$sessionObjectSerialized = getSessionVariable($objectName, FALSE);
if($sessionObjectSerialized == FALSE){
$sessionObjectSerialized = constructSessionObject($objectName, $params);
setSessionVariable($objectName, $sessionObjectSerialized);
}
$sessionObject = unserialize($sessionObjectSerialized);
return $sessionObject;
}
function constructSessionObject($objectName, $params = array()){
switch($objectName){
case('gnugpg_key_ring'):{
$gnugpgKeyRing = getGNUPGKeyRing(); //do whatever you need to do to make the keyring.
return serialize($countryScheme);
}
default:{
throw new UnsupportedOperationException("Unknown object name objectName, cannot retrieve from session.");
break;
}
}
}
//Call this before anything else
function initSession(){
session_name('projectName');
session_start();
}
function setSessionVariable($name, $value){
$_SESSION['projectName'][$name] = $value;
}
function getSessionVariable($name, $default = FALSE){
if(isset($_SESSION['projectName'])){
if(isset($_SESSION['projectName'][$name])){
$value = $_SESSION['projectName'][$name];
}
}
return $default;
}
Run Code Online (Sandbox Code Playgroud)
然后通过调用检索该对象
getSessionObject('gnugpg_key_ring');
Run Code Online (Sandbox Code Playgroud)
然而,并非所有对象总是可序列化的,例如,如果对象保存打开文件的文件句柄,则需要一些额外的代码来在对象序列化时关闭文件,然后在对象反序列化时重新打开文件。
如果对象很大,那么最好使用适当的缓存工具(例如 memcached)来存储序列化对象,而不是会话。
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |