phpgroupware-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Phpgroupware-cvs] phpgwapi/inc/class.sessions_php4.inc.php, 1.22


From: nomail
Subject: [Phpgroupware-cvs] phpgwapi/inc/class.sessions_php4.inc.php, 1.22
Date: Thu, 30 Dec 2004 07:47:31 +0100

Update of /phpgwapi/inc
Added Files:
        Branch: 
          class.sessions_php4.inc.php

date: 2004/12/30 06:47:31;  author: skwashd;  state: Exp;  lines: +51 -41

Log Message:
new HEAD
=====================================================================
<?php
        /**
        * Session management based on php4
        * @author Dan Kuykendall <address@hidden>
        * @author Joseph Engo <address@hidden>
        * @author Ralf Becker <address@hidden>
        * @copyright Copyright (C) 2000-2004 Free Software Foundation, Inc. 
http://www.fsf.org/
        * @license http://www.fsf.org/licenses/lgpl.html GNU Lesser General 
Public License
        * @package phpgwapi
        * @subpackage accounts
        * @version $Id: class.sessions_php4.inc.php,v 1.22 2004/12/30 06:47:31 
skwashd Exp $
        */

        /**
        * Session management based on php4
        * 
        * @package phpgwapi
        * @subpackage accounts
        */
        class sessions extends sessions_
        {
                function sessions()
                {
                        //Call abstract class constructor
                        $this->sessions_();
                        
                        //respect the config option for cookies
                        
ini_set('session.use_cookies',address@hidden'phpgw_info']['server']['usecookies']);
                        //don't rewrite URL, as we have to do it in link - why? 
cos it is buggy otherwise
                        ini_set('url_rewriter.tags', '');
                        
                        //controls the time out for php4 sessions - skwashd 
18-May-2003
                        ini_set('session.gc_maxlifetime', 
$GLOBALS['phpgw_info']['server']['sessions_timeout']);
                        //ini_set('session.name', 'session_id');
                        define('PHPGW_PHPSESSID', ini_get('session.name'));
                }
                
                function read_session($sessionid)
                {
                        if($sessionid)
                        {
                                session_id($sessionid);
                        }
                        session_start();
                        return $GLOBALS['phpgw_session'] = 
$_SESSION['phpgw_session'];
                }

                function set_cookie_params($domain)
                {
                        session_set_cookie_params(0,'/',$domain);
                }

                function register_session($login,$user_ip,$now,$session_flags)
                {
                        if(@isset($this->sessionid))
                        {
                                session_id($this->sessionid);
                        }
                        session_start();

                        $GLOBALS['phpgw_session']['session_id'] = 
$this->sessionid;
                        $GLOBALS['phpgw_session']['session_lid'] = $login;
                        $GLOBALS['phpgw_session']['session_ip'] = $user_ip;
                        $GLOBALS['phpgw_session']['session_logintime'] = $now;
                        $GLOBALS['phpgw_session']['session_dla'] = $now;
                        $GLOBALS['phpgw_session']['session_action'] = 
$_SERVER['PHP_SELF'];
                        $GLOBALS['phpgw_session']['session_flags'] = 
$session_flags;
                        // we need the install-id to differ between serveral 
installs shareing one tmp-dir
                        $GLOBALS['phpgw_session']['session_install_id'] = 
$GLOBALS['phpgw_info']['server']['install_id'];

                        session_register('phpgw_session');
                        $_SESSION['phpgw_session'] = $GLOBALS['phpgw_session'];
                }

                // This will update the DateLastActive column, so the login 
does not expire
                function update_dla()
                {
                        if (@isset($GLOBALS['phpgw_info']['menuaction']))
                        {
                                $action = $GLOBALS['phpgw_info']['menuaction'];
                        }
                        else
                        {
                                $action = $_SERVER['PHP_SELF'];
                        }

                        $GLOBALS['phpgw_session']['session_dla'] = time();
                        $GLOBALS['phpgw_session']['session_action'] = $action;
                
                        session_register('phpgw_session');
                        $_SESSION['phpgw_session'] = $GLOBALS['phpgw_session'];

                        return True;
                }

                function destroy($sessionid, $kp3)
                {
                        if (! $sessionid && $kp3)
                        {
                                return False;
                        }

                        $this->log_access($this->sessionid);    // log 
logout-time

                        // Only do the following, if where working with the 
current user
                        if ($sessionid == 
$GLOBALS['phpgw_info']['user']['sessionid'])
                        {
                                $this->clean_sessions();
                                session_unset();
                                session_destroy();
                                $this->phpgw_setcookie(session_name());
                        }
                        else
                        {
                                $sessions = $this->list_sessions(0,'','',True);
                                
                                if (isset($sessions[$sessionid]))
                                {
                                        //echo 
"<p>session_php4::destroy($session_id): 
unlink('".$sessions[$sessionid]['php_session_file'].")</p>\n";
                                        
unlink($sessions[$sessionid]['php_session_file']);
                                }
                        }

                        return True;
                }

                
/*************************************************************************\
                * Functions for appsession data and session cache               
          *
                
\*************************************************************************/
                function delete_cache($accountid='')
                {
                        $account_id = 
get_account_id($accountid,$this->account_id);

                        
$GLOBALS['phpgw_session']['phpgw_app_sessions']['phpgwapi']['phpgw_info_cache'] 
= '';
        
                        session_register('phpgw_session');
                        $_SESSION['phpgw_session'] = $GLOBALS['phpgw_session'];
                }

                function appsession($location = 'default', $appname = '', $data 
= '##NOTHING##')
                {
                        if (! $appname)
                        {
                                $appname = 
$GLOBALS['phpgw_info']['flags']['currentapp'];
                        }
                        
                        /* This allows the user to put '' as the value. */
                        if ($data == '##NOTHING##')
                        {
                                // I added these into seperate steps for easier 
debugging
                                $data = 
$GLOBALS['phpgw_session']['phpgw_app_sessions'][$appname][$location]['content'];

                                /* do not decrypt and return if no data 
(decrypt returning garbage) */
                                if($data)
                                {
                                        $data = 
$GLOBALS['phpgw']->crypto->decrypt($data);
                                        //echo "appsession returning: 
location='$location',app='$appname',data=$data"; _debug_array($data);
                                        return $data;
                                }
                        }
                        else
                        {
                                $encrypteddata = 
$GLOBALS['phpgw']->crypto->encrypt($data);
                                
$GLOBALS['phpgw_session']['phpgw_app_sessions'][$appname][$location]['content'] 
= $encrypteddata;
                                session_register('phpgw_session');
                                $_SESSION['phpgw_session'] = 
$GLOBALS['phpgw_session'];
                                return $data;
                        }
                }

                function session_sort($a,$b)
                {
                        $sign = 
strcasecmp($GLOBALS['phpgw']->session->sort_order,'ASC') ? 1 : -1;

                        return 
strcasecmp($a[$GLOBALS['phpgw']->session->sort_by],
                                          
$b[$GLOBALS['phpgw']->session->sort_by]) * $sign;
                }
                
                /*!
                @function list_sessions
                @abstract get list of normal / non-anonymous sessions
                @note The data form the session-files get cached in the 
app_session phpgwapi/php4_session_cache
                @author ralfbecker
                */
                function list_sessions($start,$order,$sort,$all_no_sort = False)
                {
                        //echo 
"<p>session_php4::list_sessions($start,'$order','$sort',$all)</p>\n";
                        $session_cache = 
$this->appsession('php4_session_cache','phpgwapi');

                        $values = array();
                        $maxmatchs = 
$GLOBALS['phpgw_info']['user']['preferences']['common']['maxmatchs'];
                        $dir = @opendir($path = ini_get('session.save_path'));
                        while ($dir && $file = readdir($dir))
                        {
                                if (substr($file,0,5) != 'sess_')
                                {
                                        continue;
                                }
                                if (isset($session_cache[$file]))       // use 
copy from cache
                                {
                                        $session = $session_cache[$file];

                                        if ($session['session_flags'] == 'A' || 
!$session['session_id'] ||
                                                $session['session_install_id'] 
!= $GLOBALS['phpgw_info']['server']['install_id'])
                                        {
                                                continue;       // no anonymous 
sessions or other domains or installations
                                        }
                                        if (!$all_no_sort)      // we need the 
up-to-date data --> unset and reread it
                                        {
                                                unset($session_cache[$file]);
                                        }
                                }
                                if (!isset($session_cache[$file]))      // not 
in cache, read and cache it
                                {
          $fd = fopen ($path . '/' . $file,'r');
          $fs = filesize ($path . '/' . $file);
          // handle filesize 0 because php recently warns if fread is used on 
0byte files 
          if ($fs > 0) {
            $session = fread ($fd, filesize ($path . '/' . $file));
          } else {
            $session = '';
          }
          fclose ($fd);
                                        if (substr($session,0,14) != 
'phpgw_session|')
                                        {
                                                continue;
                                        }
                                        $session = 
unserialize(substr($session,14));
                                        unset($session['phpgw_app_sessions']);  
// not needed, saves memory
                                        $session_cache[$file] = $session;
                                }
                                if ($session['session_flags'] == 'A' || 
!$session['session_id'] ||
                                    $session['session_install_id'] != 
$GLOBALS['phpgw_info']['server']['install_id'])
                                {
                                        continue;       // no anonymous 
sessions or other domains or installations
                                }
                                //echo "file='$file'=<pre>"; print_r($session); 
echo "</pre>"; 
                                
                                $session['php_session_file'] = $path . '/' . 
$file;
                                $values[$session['session_id']] = $session;
                        }
                        @closedir($dir);
                        
                        if (!$all_no_sort)
                        {
                                $GLOBALS['phpgw']->session->sort_by = $sort;
                                $GLOBALS['phpgw']->session->sort_order = $order;
                        
                                
uasort($values,array('sessions','session_sort'));
                                
                                $i = 0;
                                $start = intval($start);
                                foreach($values as $id => $data)
                                {
                                        if ($i < $start || $i > 
$start+$maxmatchs)
                                        {
                                                unset($values[$id]);
                                        }
                                        ++$i;
                                }
                                reset($values);
                        }
                        
$this->appsession('php4_session_cache','phpgwapi',$session_cache);

                        return $values;
                }
                
                /*!
                @function total
                @abstract get number of normal / non-anonymous sessions
                @author ralfbecker
                */
                function total()
                {
                        return count($this->list_sessions(0,'','',True));
                }
        }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]