Code

Apply fix for #6890
[gosa.git] / trunk / gosa-core / include / class_session.inc
1 <?php
2 /*
3  * This code is part of GOsa (http://www.gosa-project.org)
4  * Copyright (C) 2003-2008 GONICUS GmbH
5  *
6  * ID: $$Id$$
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  */
23 class session {
25         public static function get_session_size()
26         {
28         }
30         public static function get_element_size()
31         {
32         
33         }
35         public static function add_channel($name)
36         {
37                 /* If there's already such kind of channel, skip... */
38                 if (isset($_SESSION[$name])){
39                         return (FALSE);
40                 }
42                 /* Allocate it... */
43                 $_SESSION[$name]= array();
44                 $_POST["_channel_"]= $name;
45                 return (TRUE);
46         }
48         public static function remove_channel($name)
49         {
50                 /* If there's already such kind of channel, skip... */
51                 if (isset($_SESSION[$name])){
52                         unset($_SESSION[$name]);
53                         if (isset($_POST["_channel_"])){
54                                 unset($_POST["_channel_"]);
55                         }
56                         return (TRUE);
57                 }
59                 return (FALSE);
60         }
62         public static function is_set($name)
63         {
64                 $channel= "";
65                 if (isset($_POST['_channel_'])){
66                         $channel= $_POST['_channel_'];
67                 }
69                 /* Global fallback if not set */
70                 if ($channel == ""){
71                         return(isset($_SESSION[$name]));
72                 }
74                 /* Sanity check */
75                 if (!session::channel_exists($channel)){
76                         msg_dialog::display(_("Internal error"), _("Requested channel does not exist! Please contact your Administrator."), FATAL_ERROR_DIALOG);
77                 }
79                 $channel= "gch_".$channel;
80                 return(isset($_SESSION[$channel][$name]));
81         }
83         public static function global_is_set($name)
84         {
85                 return(isset($_SESSION[$name]));
86         }
88         public static function set($name,$value)
89         {
90                 $channel= "";
91                 if (isset($_POST['_channel_'])){
92                         $channel= $_POST['_channel_'];
93                 }
95                 /* Global fallback if not set */
96                 if ($channel == ""){
97                         $_SESSION[$name] = $value;
98                 } else {
99                         /* Sanity check */
100                         if (!session::channel_exists($channel)){
101                                 msg_dialog::display(_("Internal error"), _("Requested channel does not exist! Please contact your Administrator."), FATAL_ERROR_DIALOG);
102                         }
103                         $_SESSION[$channel][$name] = $value;
104                 }
105         }
107         public static function global_set($name,$value)
108         {
109                 $_SESSION[$name] = $value;
110         }
112         public static function &get($name)
113         {
114                 $channel= "";
115                 if (isset($_POST['_channel_'])){
116                         $channel= $_POST['_channel_'];
117                 }
119                 /* Global fallback if not set */
120                 if ($channel == ""){
121                         $ret = &$_SESSION[$name];
122                         return($ret);
123                 }
125                 /* Sanity check */
126                 if (!session::channel_exists($channel)){
127                         msg_dialog::display(_("Internal error"), _("Requested channel does not exist! Please contact your Administrator."), FATAL_ERROR_DIALOG);
128                 }
130                 $channel= "gch_".$channel;
131                 $ret = &$_SESSION[$channel][$name];
132                 return($ret);
133         }
135         public static function &global_get($name)
136         {
137                 $ret = &$_SESSION[$name];
138                 return($ret);
139         }
141         public static function delete($name)
142         {
143                 $channel= "";
144                 if (isset($_POST['_channel_'])){
145                         $channel= $_POST['_channel_'];
146                 }
148                 /* Global fallback if not set */
149                 if ($channel == ""){
150                         if(isset($_SESSION[$name])){
151                                 unset($_SESSION[$name]);
152                         }
153                 } else {
154                         if(isset($_SESSION[$channel][$name])){
155                                 unset($_SESSION[$channel][$name]);
156                         }
157                 }
158         }
160         public static function global_delete($name)
161         {
162                 if($_SESSION[$name]){
163                         unset($_SESSION[$name]);
164                 }
165         }
167         public static function un_set($name)
168         {
169                 return(session::delete($name));
170         }
172         public static function global_un_set($name)
173         {
174                 return(session::global_delete($name));
175         }
177         public static function start()
178         {
179                 /* Set cookie lifetime to one day (The parameter is in seconds ) */
180                 session_set_cookie_params(24*60*60);
182                 /* Set cache limter to one day (parameter is minute !!)*/
183                 session_cache_expire(60*24);  // default is 180
185                 /* Set session max lifetime, to prevent the garbage collector to delete session before timeout.
186                    !! The garbage collector is a cron job on debian systems, the cronjob will fetch the timeout from
187                    the php.ini, so if you use debian, you must hardcode session.gc_maxlifetime in your php.ini */
188                 ini_set("session.gc_maxlifetime",24*60*60);
189                 session_start();
191                 /* Check for changed browsers and bail out */
192                 if (isset($_SESSION['HTTP_USER_AGENT']))
193                 {
194                         if ($_SESSION['HTTP_USER_AGENT'] !=  md5($_SERVER['HTTP_USER_AGENT'])) {
195                                 session_destroy();
196                                 session_start();
197                         }
198                 } else {
199                         $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
200                 }
202                 /* Regenerate ID to increase security */
203                 if (!isset($_SESSION['started'])){
204                         session_regenerate_id();
205                         $_SESSION['started'] = true;
206                 }
207         }
209         public static function destroy()
210         {
211                 @session_destroy();
212         }
214         public static function set_lifetime($seconds = -1)
215         {
216                 echo "Not implemented yet";
217         }
219         public static function &get_all()
220         {
221                 $ret = &$_SESSION;
222                 return($ret);
223         }
226 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
227 ?>