public static function init()
{
if (!static::$initialized) {
$sessionTimeLimit = 20 * 60;
session_set_cookie_params($sessionTimeLimit);
session_start();
// Verify if session already is valid
$keyDiscardTime = '___discard_after___';
$now = time();
if (isset($_SESSION[$keyDiscardTime]) && $now > $_SESSION[$keyDiscardTime]) {
// this session has worn out its welcome; kill it and start a brand new one
session_unset();
session_destroy();
session_start();
}
// either new or old, it should live at most for another hour
$_SESSION[$keyDiscardTime] = $now + $sessionTimeLimit;
static::$initialized = true;
//Clear all old flash data
foreach ($_SESSION as $k => $v) {
if (Str::contains($k, ":old:")) {
static::clear($k);
}
}
//Set all new flash data as old, to be cleared on the next request
foreach ($_SESSION as $k => $v) {
$parts = explode(":new:", $k);
if (is_array($parts) && count($parts) == 2) {
$newKey = "flash:old:" . $parts[1];
static::set($newKey, $v);
static::clear($k);
}
}
}
}