X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_session.inc;h=9d298cd9eabdf7b9a2933f39fcafe2aec58a8418;hb=78a6813efd2f0b4eb471a688685a2abf1429ebf8;hp=4a98ad2dc6aa31bd2c67c050b05b3558ea58e707;hpb=4d43b00153098723c2855e2fa1a5acee3f41232d;p=gosa.git diff --git a/gosa-core/include/class_session.inc b/gosa-core/include/class_session.inc index 4a98ad2dc..9d298cd9e 100644 --- a/gosa-core/include/class_session.inc +++ b/gosa-core/include/class_session.inc @@ -32,17 +32,107 @@ class session { } + public static function add_channel($name) + { + /* If there's already such kind of channel, skip... */ + if (isset($_SESSION[$name])){ + return (FALSE); + } + + /* Allocate it... */ + $_SESSION[$name]= array(); + $_POST["_channel_"]= $name; + return (TRUE); + } + + public static function remove_channel($name) + { + /* If there's already such kind of channel, skip... */ + if (isset($_SESSION[$name])){ + unset($_SESSION[$name]); + if (isset($_POST["_channel_"])){ + unset($_POST["_channel_"]); + } + return (TRUE); + } + + return (FALSE); + } + public static function is_set($name) + { + $channel= ""; + if (isset($_POST['_channel_'])){ + $channel= $_POST['_channel_']; + } + + /* Global fallback if not set */ + if ($channel == ""){ + return(isset($_SESSION[$name])); + } + + /* Sanity check */ + if (!session::channel_exists($channel)){ + msg_dialog::display(_("Internal error"), _("Requested channel does not exist! Please contact your Administrator."), FATAL_ERROR_DIALOG); + } + + $channel= "gch_".$channel; + return(isset($_SESSION[$channel][$name])); + } + + public static function global_is_set($name) { return(isset($_SESSION[$name])); } public static function set($name,$value) + { + $channel= ""; + if (isset($_POST['_channel_'])){ + $channel= $_POST['_channel_']; + } + + /* Global fallback if not set */ + if ($channel == ""){ + $_SESSION[$name] = $value; + } else { + /* Sanity check */ + if (!session::channel_exists($channel)){ + msg_dialog::display(_("Internal error"), _("Requested channel does not exist! Please contact your Administrator."), FATAL_ERROR_DIALOG); + } + $_SESSION[$channel][$name] = $value; + } + } + + public static function global_set($name,$value) { $_SESSION[$name] = $value; } public static function &get($name) + { + $channel= ""; + if (isset($_POST['_channel_'])){ + $channel= $_POST['_channel_']; + } + + /* Global fallback if not set */ + if ($channel == ""){ + $ret = &$_SESSION[$name]; + return($ret); + } + + /* Sanity check */ + if (!session::channel_exists($channel)){ + msg_dialog::display(_("Internal error"), _("Requested channel does not exist! Please contact your Administrator."), FATAL_ERROR_DIALOG); + } + + $channel= "gch_".$channel; + $ret = &$_SESSION[$channel][$name]; + return($ret); + } + + public static function &global_get($name) { $ret = &$_SESSION[$name]; return($ret); @@ -50,7 +140,26 @@ class session { public static function delete($name) { - if(session::is_set($name)){ + $channel= ""; + if (isset($_POST['_channel_'])){ + $channel= $_POST['_channel_']; + } + + /* Global fallback if not set */ + if ($channel == ""){ + if(isset($_SESSION[$name])){ + unset($_SESSION[$name]); + } + } else { + if(isset($_SESSION[$channel][$name])){ + unset($_SESSION[$channel][$name]); + } + } + } + + public static function global_delete($name) + { + if($_SESSION[$name]){ unset($_SESSION[$name]); } } @@ -60,6 +169,11 @@ class session { return(session::delete($name)); } + public static function global_un_set($name) + { + return(session::global_delete($name)); + } + public static function start() { /* Set cookie lifetime to one day (The parameter is in seconds ) */ @@ -72,24 +186,26 @@ class session { !! The garbage collector is a cron job on debian systems, the cronjob will fetch the timeout from the php.ini, so if you use debian, you must hardcode session.gc_maxlifetime in your php.ini */ ini_set("session.gc_maxlifetime",24*60*60); + session_name("GOsa"); session_start(); - /* Check for changed browsers and bail out */ - if (isset($_SESSION['HTTP_USER_AGENT'])) - { - if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) { - session_destroy(); - session_start(); - } - } else { - $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); - } + /* Check for changed browsers and bail out */ + if (isset($_SESSION['HTTP_USER_AGENT'])) + { + if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) { + session_destroy(); + session_name("GOsa"); + session_start(); + } + } else { + $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); + } - /* Regenerate ID to increase security */ - if (!isset($_SESSION['started'])){ - session_regenerate_id(); - $_SESSION['started'] = true; - } + /* Regenerate ID to increase security */ + if (!isset($_SESSION['started'])){ + session_regenerate_id(); + $_SESSION['started'] = true; + } } public static function destroy() @@ -109,4 +225,5 @@ class session { } } +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>