mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-01-08 23:19:04 +01:00
implement expiration time for Api\Cache::(g|s)etSession()
This commit is contained in:
parent
c03211180d
commit
c6bf51180f
@ -31,7 +31,7 @@ namespace EGroupware\Api;
|
|||||||
* and it's value is stored in the cache AND retured
|
* and it's value is stored in the cache AND retured
|
||||||
* 4. parameters to pass to the callback as array, see call_user_func_array
|
* 4. parameters to pass to the callback as array, see call_user_func_array
|
||||||
* 5. an expiration time in seconds to specify how long data should be cached,
|
* 5. an expiration time in seconds to specify how long data should be cached,
|
||||||
* default 0 means infinit (this time is not garantied and not supported for all levels!)
|
* default 0 means infinit (this time is not supported for request level!)
|
||||||
*
|
*
|
||||||
* Data is stored under an application name and a location, like egw_session::appsession().
|
* Data is stored under an application name and a location, like egw_session::appsession().
|
||||||
* In fact data stored at cache level Api\Cache::SESSION, is stored in the same way as
|
* In fact data stored at cache level Api\Cache::SESSION, is stored in the same way as
|
||||||
@ -357,6 +357,11 @@ class Cache
|
|||||||
return self::unsetCache(self::INSTANCE,$app,$location);
|
return self::unsetCache(self::INSTANCE,$app,$location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prefix for appname to store expiration time in session cache
|
||||||
|
*/
|
||||||
|
const SESSION_EXPIRATION_PREFIX = '*expiration*';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set some data in the cache for the whole source tree (all instances)
|
* Set some data in the cache for the whole source tree (all instances)
|
||||||
*
|
*
|
||||||
@ -368,7 +373,6 @@ class Cache
|
|||||||
*/
|
*/
|
||||||
static public function setSession($app,$location,$data,$expiration=0)
|
static public function setSession($app,$location,$data,$expiration=0)
|
||||||
{
|
{
|
||||||
unset($expiration); // not used, but required by function signature
|
|
||||||
if (isset($_SESSION[Session::EGW_SESSION_ENCRYPTED]))
|
if (isset($_SESSION[Session::EGW_SESSION_ENCRYPTED]))
|
||||||
{
|
{
|
||||||
if (Session::ERROR_LOG_DEBUG) error_log(__METHOD__.' called after session was encrypted --> ignored!');
|
if (Session::ERROR_LOG_DEBUG) error_log(__METHOD__.' called after session was encrypted --> ignored!');
|
||||||
@ -376,6 +380,11 @@ class Cache
|
|||||||
}
|
}
|
||||||
$_SESSION[Session::EGW_APPSESSION_VAR][$app][$location] = $data;
|
$_SESSION[Session::EGW_APPSESSION_VAR][$app][$location] = $data;
|
||||||
|
|
||||||
|
if ($expiration > 0)
|
||||||
|
{
|
||||||
|
$_SESSION[Session::EGW_APPSESSION_VAR][self::SESSION_EXPIRATION_PREFIX.$app][$location] = time()+$expiration;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -393,12 +402,18 @@ class Cache
|
|||||||
*/
|
*/
|
||||||
static public function &getSession($app,$location,$callback=null,array $callback_params=array(),$expiration=0)
|
static public function &getSession($app,$location,$callback=null,array $callback_params=array(),$expiration=0)
|
||||||
{
|
{
|
||||||
unset($expiration); // not used, but required by function signature
|
|
||||||
if (isset($_SESSION[Session::EGW_SESSION_ENCRYPTED]))
|
if (isset($_SESSION[Session::EGW_SESSION_ENCRYPTED]))
|
||||||
{
|
{
|
||||||
if (Session::ERROR_LOG_DEBUG) error_log(__METHOD__.' called after session was encrypted --> ignored!');
|
if (Session::ERROR_LOG_DEBUG) error_log(__METHOD__.' called after session was encrypted --> ignored!');
|
||||||
return null; // can no longer store something in the session, eg. because commit_session() was called
|
return null; // can no longer store something in the session, eg. because commit_session() was called
|
||||||
}
|
}
|
||||||
|
// check if entry is expired and clean it up in that case
|
||||||
|
if (isset($_SESSION[Session::EGW_APPSESSION_VAR][self::SESSION_EXPIRATION_PREFIX.$app][$location]) &&
|
||||||
|
$_SESSION[Session::EGW_APPSESSION_VAR][self::SESSION_EXPIRATION_PREFIX.$app][$location] < time())
|
||||||
|
{
|
||||||
|
unset($_SESSION[Session::EGW_APPSESSION_VAR][$app][$location],
|
||||||
|
$_SESSION[Session::EGW_APPSESSION_VAR][self::SESSION_EXPIRATION_PREFIX.$app][$location]);
|
||||||
|
}
|
||||||
if (!isset($_SESSION[Session::EGW_APPSESSION_VAR][$app][$location]) && !is_null($callback))
|
if (!isset($_SESSION[Session::EGW_APPSESSION_VAR][$app][$location]) && !is_null($callback))
|
||||||
{
|
{
|
||||||
$_SESSION[Session::EGW_APPSESSION_VAR][$app][$location] = call_user_func_array($callback,$callback_params);
|
$_SESSION[Session::EGW_APPSESSION_VAR][$app][$location] = call_user_func_array($callback,$callback_params);
|
||||||
@ -420,6 +435,13 @@ class Cache
|
|||||||
if (Session::ERROR_LOG_DEBUG) error_log(__METHOD__.' called after session was encrypted --> ignored!');
|
if (Session::ERROR_LOG_DEBUG) error_log(__METHOD__.' called after session was encrypted --> ignored!');
|
||||||
return false; // can no longer store something in the session, eg. because commit_session() was called
|
return false; // can no longer store something in the session, eg. because commit_session() was called
|
||||||
}
|
}
|
||||||
|
// check if entry is expired and clean it up in that case
|
||||||
|
if (isset($_SESSION[Session::EGW_APPSESSION_VAR][self::SESSION_EXPIRATION_PREFIX.$app][$location]) &&
|
||||||
|
$_SESSION[Session::EGW_APPSESSION_VAR][self::SESSION_EXPIRATION_PREFIX.$app][$location] < time())
|
||||||
|
{
|
||||||
|
unset($_SESSION[Session::EGW_APPSESSION_VAR][$app][$location],
|
||||||
|
$_SESSION[Session::EGW_APPSESSION_VAR][self::SESSION_EXPIRATION_PREFIX.$app][$location]);
|
||||||
|
}
|
||||||
if (!isset($_SESSION[Session::EGW_APPSESSION_VAR][$app][$location]))
|
if (!isset($_SESSION[Session::EGW_APPSESSION_VAR][$app][$location]))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user