Nếu đó là một đối tượng nhỏ mà không mất nhiều bộ nhớ và là serializable bạn chỉ có thể lưu nó trong phiên:
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;
}
và sau đó lấy đối tượng đó bằng cách gọi
getSessionObject('gnugpg_key_ring');
Tuy nhiên không phải tất cả các đối tượng luôn được tuần tự hóa nếu đối tượng giữ một tập tin xử lý cho một tập tin mở, mà sẽ cần phải có một số mã thêm để đóng tập tin khi đối tượng được serialized và sau đó mở lại các tập tin khi đối tượng đã được unserialized.
Nếu đối tượng lớn, thì bạn nên sử dụng công cụ lưu bộ nhớ đệm thích hợp như được ghi nhớ để lưu trữ đối tượng được tuần tự hóa, thay vì phiên.
'apc',' memcache', 'memcached',' shmop', miễn là có thể tuần tự hóa. – Wrikken
@Wrikken bạn có thể muốn thêm xcache, bất kỳ bộ nhớ cache opcode nào là một ứng cử viên tốt –
wincache nếu bạn đang sử dụng máy chủ cửa sổ –