Session.object
上传用户:xiao730204
上传日期:2007-01-04
资源大小:141k
文件大小:4k
源码类别:

WEB邮件程序

开发平台:

PHP

  1. <?php
  2. class Session extends BaseObject {
  3.    var $magic_string;
  4.    var $remote_addr;
  5.    var $http_user_agent;
  6.    var $expire_time;
  7.    var $grant_time;
  8.    var $session_id;
  9.    var $session_elems;
  10.    var $session_elem_id;
  11.    var $db_id;
  12.    var $session_db;
  13.    var $debug;
  14.    Function Session( $session_db = '' ) {
  15.       global $REMOTE_ADDR;
  16.       $this->BaseObject( 'Session' );
  17.       $this->session_db       = new Dummy_Session_Db();
  18.       if ( is_object( $session_db ) ) {
  19.          $this->session_db    = $session_db;
  20.       }
  21.       $this->session_id       = '';
  22.       $this->remote_addr      = '127.0.0.1';
  23.       if ( isset( $REMOTE_ADDR ) && $REMOTE_ADDR != '' ) {
  24.          $this->remote_addr      = $REMOTE_ADDR;
  25.       }
  26.       $this->http_user_agent  = 'NONE';
  27.       $this->grant_time       = new TimeObject();
  28.       $this->expire_time      = new TimeObject();
  29.       $this->session_elems    = Array();
  30.       $this->session_elem_id  = 0;
  31.       $this->db_id            = -1;
  32.       $this->debug            = new Debug();
  33.       $this->debug->prefix    = 'Session';
  34.       $this->debug->Off();
  35.    }
  36.    Function Copy( $target_obj ) {
  37.       $this->magic_string        = $target_obj->magic_string;
  38.       $this->remote_addr         = $target_obj->remote_addr;
  39.       $this->http_user_agent     = $target_obj->http_user_agent;
  40.       $this->expire_time         = $target_obj->expire_time;
  41.       $this->grant_time          = $target_obj->grant_time;
  42.       $this->session_id          = $target_obj->session_id;
  43.       $this->session_elems       = $target_obj->session_elems;
  44.       $this->db_id               = $target_obj->db_id;
  45.    }
  46.    Function GenerateId() {
  47.       return $this->CreateSessionId();
  48.    }
  49.    Function CreateSessionId() {
  50.       global $REMOTE_ADDR;
  51.       global $HTTP_USER_AGENT;
  52.       /* Blank out the session id */
  53.       $this->magic_string = '';
  54.       /* seed with microseconds since last "whole" second */
  55.       mt_srand((double)microtime()*1000000);
  56.       for( $i = 0; $i < 50; $i++ ) {
  57.          $randval = mt_rand( 33, 128);
  58.          $this->magic_string .= sprintf( '%c', $randval );
  59.       }
  60.       /*
  61.       $this->session_id = rawurlencode( $this->session_id );
  62.       */
  63.       $this->http_user_agent  = $HTTP_USER_AGENT;
  64.       $this->session_id       = 
  65.          md5(
  66.             $this->remote_addr .
  67.             $this->http_user_agent .
  68.             $this->magic_string
  69.          );
  70.       return $this->session_id;
  71.    }
  72.    Function ListAll() {}
  73.    Function Add( $A_SessionElem ) {
  74.       if ( ! is_object( $A_SessionElem ) ) {
  75.          return Array( false, 'Add - Non object pass.' );
  76.       }
  77.       /* Jic this is out of whack */
  78.       $this->session_elem_id = count( $this->session_elems );
  79.       $this->session_elems[ $this->session_elem_id ] = $A_SessionElem;
  80.       $this->session_elem_id++;
  81.       return Array( true, $this->session_elem_id );
  82.    }
  83.    Function Save() {
  84.       global $default;
  85.       $session_db = $this->session_db;
  86.       $session_db->debug->debug = $this->debug->debug;
  87.       $ret_vals   = $session_db->Get( $this->session_id, 0 );
  88.       if ( $ret_vals[ 0 ] == true ) {
  89.       $t_obj = $ret_vals[ 1 ];
  90.       $this->db_id = $t_obj->db_id;
  91.       $session_db->Modify( $this );
  92.       } else {
  93.       if ( $this->session_id == '' ) {
  94.          $this->session_id = $this->CreateSessionId();
  95.       }
  96.       $session_db->Add( $this );
  97.       }
  98.    }
  99.    Function Get( $session_id ) {
  100.       global $REMOTE_ADDR;
  101.       global $HTTP_USER_AGENT;
  102.       global $default;
  103.       $session_db = $this->session_db;
  104.       $session_db->debug->debug = $this->debug->debug;
  105.       $this->debug->Message( 'Retrieve : ' . $session_id );
  106.       $ret_vals   = $session_db->Get( $session_id );
  107.       $this->session_id = $session_id;
  108.       if ( $ret_vals[ 0 ] == true ) {
  109.          // Trust the database don't trust userspace muckery of
  110.          // the timestamp
  111.          $this->Copy( $ret_vals[ 1 ] );
  112.          return true;
  113.       } else {
  114.          /*
  115.          We shouldn't autocreate a session on a get...
  116.          $this->session_id = $session_id;
  117.          return $session_db->Add( $this );
  118.          */
  119.       }
  120.    }
  121.    Function Expire( $session_id = '') {
  122.       if ( $session_id == '' ) {
  123.          $session_id = $this->db_id;
  124.       }
  125.       $session_db = $this->session_db;
  126.       $session_db->debug->debug = $this->debug->debug;
  127.       $session_db->Delete( $session_id );
  128.    }
  129. }
  130. ?>