[ Index ]
 

Code source de dotProject 2.1 RC1

Accédez au Source d'autres logiciels libres | Soutenez Angelica Josefina !

title

Body

[fermer]

/includes/ -> session.php (source)

   1  <?php /* $Id: session.php,v 1.13.2.2 2007/01/31 09:36:52 ajdonnison Exp $ */
   2  ##
   3  ## Session Handling Functions
   4  ##
   5  /*
   6  * Please note that these functions assume that the database
   7  * is accessible and that a table called 'sessions' (with a prefix
   8  * if necessary) exists.  It also assumes MySQL date and time
   9  * functions, which may make it less than easy to port to
  10  * other databases.  You may need to use less efficient techniques
  11  * to make it more generic.
  12  *
  13  * NOTE: index.php and fileviewer.php MUST call dPsessionStart
  14  * instead of trying to set their own sessions.
  15  */
  16  
  17  if (!defined('DP_BASE_DIR')) {
  18      die('You should not access this file directly');
  19  }
  20  
  21  require_once  DP_BASE_DIR . '/includes/main_functions.php';
  22  require_once  DP_BASE_DIR . '/includes/db_adodb.php';
  23  require_once  DP_BASE_DIR . '/includes/db_connect.php';
  24  require_once  DP_BASE_DIR . '/classes/query.class.php';
  25  require_once  DP_BASE_DIR . '/classes/ui.class.php';
  26  require_once  DP_BASE_DIR . '/classes/event_queue.class.php';
  27  
  28  function dPsessionOpen($save_path, $session_name)
  29  {
  30      return true;
  31  }
  32  
  33  function dPsessionClose()
  34  {
  35      return true;
  36  }
  37  
  38  function dPsessionRead($id)
  39  {
  40      $q  = new DBQuery;
  41      $q->addTable('sessions');
  42      $q->addQuery('session_data');
  43      $q->addQuery('UNIX_TIMESTAMP() - UNIX_TIMESTAMP(session_created) as session_lifespan');
  44      $q->addQuery('UNIX_TIMESTAMP() - UNIX_TIMESTAMP(session_updated) as session_idle');
  45      $q->addWhere("session_id = '$id'");
  46      $qid =& $q->exec();
  47      if (! $qid || $qid->EOF ) {
  48          dprint(__FILE__, __LINE__, 11, "Failed to retrieve session $id");
  49          $data =  "";
  50      } else {
  51          $max = dPsessionConvertTime('max_lifetime');
  52          $idle = dPsessionConvertTime('idle_time');
  53          dprint(__FILE__, __LINE__, 11, "Found session $id, max=$max/" . $qid->fields['session_lifespan']
  54          . ", idle=$idle/" . $qid->fields['session_idle']);
  55          // If the idle time or the max lifetime is exceeded, trash the
  56          // session.
  57          if ($max < $qid->fields['session_lifespan']
  58           || $idle < $qid->fields['session_idle']) {
  59              dprint(__FILE__, __LINE__, 11, "session $id expired");
  60              dPsessionDestroy($id);
  61              $data = '';
  62          } else {
  63              $data = $qid->fields['session_data'];
  64          }
  65      }
  66      $q->clear();
  67      return $data;
  68  }
  69  
  70  function dPsessionWrite($id, $data)
  71  {
  72      global $AppUI;
  73      
  74      $q = new DBQuery;
  75      $q->addQuery('count(*) as row_count');
  76      $q->addTable('sessions');
  77      $q->addWhere("session_id = '$id'");
  78  
  79      if ( $qid =& $q->exec() 
  80      && ( @$qid->fields['row_count'] > 0 || @$qid->fields[0] > 0) ) {
  81          dprint(__FILE__, __LINE__, 11, "Updating session $id");
  82          $q->query = null;
  83          $q->addUpdate('session_data', $data);
  84          if (isset($AppUI))
  85              $q->addUpdate('session_user', $AppUI->last_insert_id);
  86      } else {
  87          dprint(__FILE__, __LINE__, 11, "Creating new session $id");
  88          $q->query = null;
  89          $q->where = null;
  90          $q->addInsert('session_id', $id);
  91          $q->addInsert('session_data', $data);
  92          $q->addInsert('session_created', date('Y-m-d H:i:s'));
  93      }
  94      $q->exec();
  95      $q->clear();
  96      return true;
  97  }
  98  
  99  function dPsessionDestroy($id, $user_access_log_id=0) {
 100       global $AppUI;
 101      
 102      if(!($user_access_log_id) && isset($AppUI->last_insert_id)){
 103          $user_access_log_id = $AppUI->last_insert_id;
 104      }
 105      
 106      dprint(__FILE__, __LINE__, 11, "Killing session $id");
 107      $q = new DBQuery;
 108      $q->setDelete('sessions');
 109      $q->addWhere("session_id = '$id'");
 110      $q->exec();
 111      $q->clear();
 112      
 113      if ($user_access_log_id) {
 114           $q->addTable('user_access_log');
 115           $q->addUpdate('date_time_out', date("Y-m-d H:i:s"));
 116          $q->addWhere('user_access_log_id = ' . $user_access_log_id);
 117           $q->exec();
 118           $q->clear();
 119       }
 120      
 121      return true;
 122  }
 123  
 124  function dPsessionGC($maxlifetime)
 125  {
 126      global $dPconfig;
 127      global $AppUI;
 128  
 129      dprint(__FILE__, __LINE__, 11, "Session Garbage collection running");
 130      $now = time();
 131      $max = dPsessionConvertTime('max_lifetime');
 132      $idle = dPsessionConvertTime('idle_time');
 133      // Find all the session
 134      $q = new DBQuery;
 135      $q->setDelete('sessions');
 136      $q->addWhere("UNIX_TIMESTAMP() - UNIX_TIMESTAMP(session_updated) > $idle OR UNIX_TIMESTAMP() - UNIX_TIMESTAMP(session_created) > $max");
 137      $q->exec();
 138      $q->clear();
 139      if (isset($dPconfig['session_gc_scan_queue'])
 140        && $dPconfig['session_gc_scan_queue']) {
 141          // We need to scan the event queue.  If $AppUI isn't created yet
 142          // And it isn't likely that it will be, we create it and run the
 143          // queue scanner.
 144          if (! isset($AppUI)) {
 145              $AppUI = new CAppUI;
 146              $queue = new EventQueue;
 147              $queue->scan();
 148          }
 149      }
 150      return true;
 151  }
 152  
 153  function dPsessionConvertTime($key)
 154  {
 155      global $dPconfig;
 156      $key = 'session_' . $key;
 157  
 158      // If the value isn't set, then default to 1 day.
 159      if (! isset($dPconfig[$key]) || ! $dPconfig[$key] )
 160          return 86400;
 161  
 162      $numpart = (int) $dPconfig[$key];
 163      $modifier = substr($dPconfig[$key], -1);
 164      if (! is_numeric($modifier)) {
 165          switch ($modifier) {
 166              case 'h':
 167                  $numpart *= 3600;
 168                  break;
 169              case 'd':
 170                  $numpart *= 86400;
 171                  break;
 172              case 'm':
 173                  $numpart *= (86400 * 30);
 174                  break;
 175              case 'y':
 176                  $numpart *= (86400 * 365);
 177                  break;
 178          }
 179      }
 180      return $numpart;
 181  }
 182  
 183  function dpSessionStart($start_vars = 'AppUI')
 184  {
 185      global $dPconfig;
 186  
 187      session_name('dotproject');
 188      if (ini_get('session.auto_start') > 0) {
 189          session_write_close();
 190      }
 191      if (isset($dPconfig['session_handling'])
 192          && strtolower($dPconfig['session_handling']) == 'app') 
 193      {
 194          ini_set('session.save_handler', 'user');
 195      
 196          session_set_save_handler(
 197              'dPsessionOpen', 
 198              'dPsessionClose', 
 199              'dPsessionRead', 
 200              'dPsessionWrite', 
 201              'dPsessionDestroy', 
 202              'dPsessionGC');
 203          $max_time = dPsessionConvertTime('max_lifetime');
 204      } else {
 205          $max_time = 0; // Browser session only.
 206      }
 207      // Try and get the correct path to the base URL.
 208      preg_match('_^(https?://)([^/]+)(:0-9]+)?(/.*)?$_i', $dPconfig['base_url'], $url_parts);
 209      $cookie_dir = $url_parts[4];
 210      if (substr($cookie_dir, 0, 1) != '/')
 211          $cookie_dir = '/' . $cookie_dir;
 212      if (substr($cookie_dir, -1) != '/')
 213          $cookie_dir .= '/';
 214      session_set_cookie_params($max_time, $cookie_dir);
 215      session_start();
 216      if (is_array($start_vars)) {
 217          foreach ($start_vars as $var) {
 218              session_register($var);
 219          }
 220      } else if (! empty($start_vars)) {
 221          session_register($start_vars);
 222      }
 223  }
 224  
 225  // vi:ai sw=2 ts=2:
 226  // vim600:ai sw=2 ts=2 fdm=marker:
 227  ?>


Généré le : Sun Feb 18 19:46:52 2007 par Balluche grâce à PHPXref 0.7