: : g_SESSIONCACHESYSTEM

Balíček funkcí pro mezi skriptovou cache. Použití je snadné, ale vhodné spíš pro rozsáhlé weby, kde se pořád berou stejné údaje. A ještě nevím, jak dobře to bude pracovat na webu, kam chodí příliš často moc lidí. Dalo by se ještě vylepšit o rychlý pre-cache všech údajů ze session na začátku skriptů, které budou údaje jen číst.

Použití:
Hned na začátku každého prvního skriptu StartSessionCacheSystem() a na konci StoreSessionCacheSystem().
Poté buď používat SCSW nebo SCSR a buď čtení z interní cache nebo bez ní.
Pro vyprázdnění celé cache dejte ClearStoredSessionCacheSystem() a StoreSessionCacheSystem().
Pro ukončení celé cache dejte DropSessionCacheSystem.
<? 
  StartSessionCacheSystem();
  SCSW("testvalue");
  $v=SCSR("testvalue");
  echo $v;
  StoreSessionCacheSystem();  
?>

Funkce StartSessionCacheSystem() vrací:

Kód:
g_sessioncachesystem.php
<? /* SESSION CACHE SYSTEM */
$g_sessioncachesystem_true = true;

unset($SCS_CacheStarted);
unset($SCS_SessionCacheID);
function StartSessionCacheSystem($sesid='MainPHPSessionCacheSystem') {
  $retn=false;
  if (!isset($GLOBALS['SCS_CacheStarted'])) {
    $sesid=md5($sesid);
    session_id($sesid);
    session_start();
    $GLOBALS['SCS_SessionCacheID']=$sesid;
    $GLOBALS['SCS_CacheStarted']=true;
    if (!isset($_SESSION['SCS_SESSION'])) {
      $retn=1;
      $_SESSION['SCS_SESSION'] = 1;
    } else 
      $retn=$_SESSION['SCS_SESSION'];
    global $_SESSION;
  }  
  return $retn;
}

unset($SCS_CacheEndedAlready);
function StoreSessionCacheSystem() {
  if (!IsSCSStillLoaded()) return false;
  $GLOBALS['_SESSION']['SCS_SESSION'] = strtotime("now");
  session_write_close();
  $GLOBALS['SCS_CacheEndedAlready']=true;
}

function ClearStoredSessionCacheSystem() {
  if (!IsSCSStillLoaded()) return false;
  if (is_array($GLOBALS['_SESSION'])) {
    reset($GLOBALS['_SESSION']);
    while(list($k,)=each($GLOBALS['_SESSION'])) {
      if ($k!='SCS_SESSION') $GLOBALS['_SESSION'][$k]='';
    }
  }
}

function DropSessionCacheSystem() {
  if (!IsSCSStillLoaded()) return false;
  $GLOBALS['_SESSION'] = array();
  session_destroy();
  $GLOBALS['SCS_CacheEndedAlready']=true;
}

function IsSCSStillLoaded() {
  if (isset($GLOBALS['SCS_CacheStarted']) && !isset($GLOBALS['SCS_CacheEndedAlready'])) return true;
  else return false;
}

function GCH_ReadValue($valname) {
  if (isset($GLOBALS['GLOBALCACHESYSTEM_'.$valname]) && !empty($GLOBALS['GLOBALCACHESYSTEM_'.$valname])) 
    return $GLOBALS['GLOBALCACHESYSTEM_'.$valname];
  else return false;
}

function GCH_WriteValue($valname,$val) {
  $GLOBALS['GLOBALCACHESYSTEM_'.$valname]=$val; 
}

function SCS_ReadValue($valname,$gcache=0) {
  if (!empty($gcache) && ($retval=GCH_ReadValue($valname))) return $retval;
  if (IsSCSStillLoaded()) {
    $retval=false;
    if (isset($GLOBALS['_SESSION']['SESVAL_'.$valname])) {
      $retval=$GLOBALS['_SESSION']['SESVAL_'.$valname];
    }
    if (!empty($gcache)) GCH_WriteValue($valname,$retval);
    return $retval;
  }  
}

function SCSR($valname,$gcache=0) {
  return SCS_ReadValue($valname,$gcache);
}

function SCS_WriteValue($valname,$val,$gcache=0) {
  if (IsSCSStillLoaded()) {
    $GLOBALS['_SESSION']['SESVAL_'.$valname]=$val;
    if (!empty($gcache)) GCH_WriteValue($valname,$retval);
  }
}

function SCSW($valname,$gcache=1) {
  return SCS_WriteValue($valname,$gcache);
}

?>