| 1 | 
joko | 
1.1 | 
<? | 
| 2 | 
  | 
  | 
//    ------------------------------------------------------------------------- | 
| 3 | 
joko | 
1.3 | 
//    $Id: Session.php,v 1.2 2002/12/01 22:32:45 joko Exp $ | 
| 4 | 
joko | 
1.1 | 
//    ------------------------------------------------------------------------- | 
| 5 | 
joko | 
1.2 | 
//    $Log: Session.php,v $ | 
| 6 | 
joko | 
1.3 | 
//    Revision 1.2  2002/12/01 22:32:45  joko | 
| 7 | 
  | 
  | 
//    + bugfix: wrong object-hierarchy: | 
| 8 | 
  | 
  | 
//       use $this->site->user->preLogout and/or $this->site->request->overrideReq... | 
| 9 | 
  | 
  | 
//    + documented | 
| 10 | 
  | 
  | 
// | 
| 11 | 
joko | 
1.2 | 
//    Revision 1.1  2002/11/12 05:42:31  joko | 
| 12 | 
  | 
  | 
//    + initial checkin | 
| 13 | 
  | 
  | 
// | 
| 14 | 
joko | 
1.1 | 
//    ------------------------------------------------------------------------- | 
| 15 | 
  | 
  | 
 | 
| 16 | 
  | 
  | 
 | 
| 17 | 
  | 
  | 
class Session { | 
| 18 | 
  | 
  | 
   | 
| 19 | 
  | 
  | 
  //============== session functions============= | 
| 20 | 
  | 
  | 
  function &Session() { | 
| 21 | 
  | 
  | 
    global $session_cfg; | 
| 22 | 
  | 
  | 
    $session_cfg["session_id"] = session_id(); | 
| 23 | 
  | 
  | 
    $session_cfg["remote_ip"] = $_SERVER["REMOTE_ADDR"]; | 
| 24 | 
  | 
  | 
    $session_cfg["remote_port"] = $_SERVER["REMOTE_PORT"]; | 
| 25 | 
  | 
  | 
    $session_cfg["user_agent"] = $_SERVER["HTTP_USER_AGENT"];     | 
| 26 | 
  | 
  | 
    $session_cfg["http_referer"] = $_SERVER["HTTP_REFERER"]; | 
| 27 | 
  | 
  | 
    $session_cfg["date"] = date('Y-m-d H:i:s', time()); | 
| 28 | 
  | 
  | 
  }  | 
| 29 | 
  | 
  | 
   | 
| 30 | 
  | 
  | 
  function start() { | 
| 31 | 
  | 
  | 
    global $session_cfg; | 
| 32 | 
  | 
  | 
    $session_exists = $this->exists($session_cfg["session_id"]); | 
| 33 | 
joko | 
1.2 | 
    //print Dumper($session_exists); | 
| 34 | 
joko | 
1.1 | 
    if (!is_array($session_exists)) { | 
| 35 | 
  | 
  | 
      $this->add_session($session_cfg); | 
| 36 | 
joko | 
1.2 | 
    } else { | 
| 37 | 
joko | 
1.1 | 
      $session_cfg["session_uid"] = $session_exists["session_uid"]; | 
| 38 | 
joko | 
1.2 | 
      if ($this->site->user->isLoggedOn()) { | 
| 39 | 
  | 
  | 
        //print "val - idle<br>"; | 
| 40 | 
  | 
  | 
        $this->validate_idle(); | 
| 41 | 
  | 
  | 
      } | 
| 42 | 
  | 
  | 
      //print "val - session<br>"; | 
| 43 | 
joko | 
1.1 | 
      $this->validate_session($session_cfg); | 
| 44 | 
  | 
  | 
    } | 
| 45 | 
  | 
  | 
  } | 
| 46 | 
  | 
  | 
   | 
| 47 | 
  | 
  | 
  function validate_session($scfgt) { | 
| 48 | 
  | 
  | 
    $this->update_session($scfgt); | 
| 49 | 
  | 
  | 
  } | 
| 50 | 
  | 
  | 
   | 
| 51 | 
  | 
  | 
  function update_session($scfg) { | 
| 52 | 
  | 
  | 
    $sql = "UPDATE f_td_sessions SET session_hits=session_hits+1,last_date='$scfg[date]' WHERE session_uid='$scfg[session_uid]'"; | 
| 53 | 
  | 
  | 
    $res = send_sql($sql); | 
| 54 | 
  | 
  | 
  } | 
| 55 | 
  | 
  | 
   | 
| 56 | 
  | 
  | 
  function add_session($scfg) { | 
| 57 | 
  | 
  | 
      //session_start(); | 
| 58 | 
  | 
  | 
      //session_register('user_status_val'); | 
| 59 | 
  | 
  | 
      connectdb(); | 
| 60 | 
  | 
  | 
      $sql="INSERT INTO f_td_sessions VALUES ('','$scfg[session_id]','1','$scfg[remote_ip]','$scfg[remote_port]','$scfg[user_agent]','$scfg[http_referer]','$scfg[date]','$scfg[date]')"; | 
| 61 | 
  | 
  | 
      $res = send_sql($sql); | 
| 62 | 
  | 
  | 
  } | 
| 63 | 
  | 
  | 
   | 
| 64 | 
  | 
  | 
  function bindUser() { | 
| 65 | 
  | 
  | 
    $session_id = session_id(); | 
| 66 | 
  | 
  | 
        $session_tm = $this->exists($session_id); | 
| 67 | 
  | 
  | 
    $date = date('Y-m-d H:i:s', time()); | 
| 68 | 
  | 
  | 
    $sql = "SELECT mid FROM f_map_user_session WHERE user_uid='$site->user->get('oid')' AND last='1'"; | 
| 69 | 
  | 
  | 
    if($res = send_sql($sql)) { | 
| 70 | 
  | 
  | 
        $row = mysql_fetch_array($res,MYSQL_ASSOC); | 
| 71 | 
  | 
  | 
    //if (!mysql_num_rows($res)>0) { | 
| 72 | 
  | 
  | 
      $sql2 = "INSERT INTO f_map_user_session VALUES ('','$site->user->get('oid')','$session_tm[session_uid]','$date','','1')"; | 
| 73 | 
  | 
  | 
      $res2 = send_sql($sql2); | 
| 74 | 
  | 
  | 
    } | 
| 75 | 
  | 
  | 
    else { | 
| 76 | 
  | 
  | 
        //print_r($row); | 
| 77 | 
  | 
  | 
      $sql3 = "Update f_map_user_session SET last='0' WHERE mid='$row[mid]'"; | 
| 78 | 
  | 
  | 
      $res3 = send_sql($sql3);   | 
| 79 | 
  | 
  | 
      $sql4 = "INSERT INTO f_map_user_session VALUES ('','$site->user->get('oid')','$session_tm[session_uid]','$date','','1')"; | 
| 80 | 
  | 
  | 
      $res4 = send_sql($sql4); | 
| 81 | 
  | 
  | 
    } | 
| 82 | 
  | 
  | 
  } | 
| 83 | 
  | 
  | 
   | 
| 84 | 
  | 
  | 
  function exists($session_id) { | 
| 85 | 
  | 
  | 
    // check if sessionID exists | 
| 86 | 
  | 
  | 
    connectdb(); | 
| 87 | 
  | 
  | 
    $sql_exists = "SELECT session_uid,session_id FROM f_td_sessions WHERE session_id='$session_id'"; | 
| 88 | 
  | 
  | 
    $res_exists = send_sql($sql_exists); | 
| 89 | 
joko | 
1.2 | 
    if (!mysql_num_rows($res_exists) > 0) { | 
| 90 | 
joko | 
1.1 | 
      return 0; | 
| 91 | 
  | 
  | 
    } | 
| 92 | 
  | 
  | 
    else { | 
| 93 | 
  | 
  | 
          $row = mysql_fetch_array($res_exists, MYSQL_ASSOC); | 
| 94 | 
  | 
  | 
          return $row; | 
| 95 | 
  | 
  | 
        } | 
| 96 | 
  | 
  | 
  }   | 
| 97 | 
  | 
  | 
   | 
| 98 | 
  | 
  | 
  function validate_idle() { | 
| 99 | 
joko | 
1.2 | 
 | 
| 100 | 
  | 
  | 
    //global $cfg, $site, $site_state; | 
| 101 | 
  | 
  | 
    global $cfg, $site_state; | 
| 102 | 
joko | 
1.1 | 
    $session_id = session_id(); | 
| 103 | 
joko | 
1.3 | 
 | 
| 104 | 
joko | 
1.1 | 
    // get "max_idle_time"-time from database | 
| 105 | 
  | 
  | 
      $sql = "SELECT pvalue FROM td_global_private WHERE pname='max_idle_time'"; | 
| 106 | 
  | 
  | 
      $res = send_sql($sql); | 
| 107 | 
joko | 
1.2 | 
      $row = mysql_fetch_array($res, MYSQL_ASSOC); | 
| 108 | 
  | 
  | 
      $max_idle_time = $row[pvalue]; | 
| 109 | 
  | 
  | 
 | 
| 110 | 
  | 
  | 
    // use a default idle-time of half an hour if database-value is empty | 
| 111 | 
  | 
  | 
      if (!$max_idle_time) $max_idle_time = 60 * 30; | 
| 112 | 
joko | 
1.1 | 
   | 
| 113 | 
  | 
  | 
    // get last "access"-time from database | 
| 114 | 
  | 
  | 
      $sql_mus = "SELECT last_date FROM f_td_sessions WHERE session_id='$session_id'"; | 
| 115 | 
  | 
  | 
      $res_mus = send_sql($sql_mus); | 
| 116 | 
joko | 
1.2 | 
      $mus = mysql_fetch_array($res_mus, MYSQL_ASSOC); | 
| 117 | 
joko | 
1.1 | 
   | 
| 118 | 
  | 
  | 
    // calculate idletime | 
| 119 | 
joko | 
1.2 | 
      $time_now = time(); | 
| 120 | 
joko | 
1.1 | 
      $last_date = strtotime($mus[last_date]); | 
| 121 | 
joko | 
1.2 | 
      $max_idle_date = $last_date + $max_idle_time; | 
| 122 | 
joko | 
1.3 | 
 | 
| 123 | 
joko | 
1.1 | 
    // check timeout | 
| 124 | 
joko | 
1.2 | 
      if ($time_now > $max_idle_date) { | 
| 125 | 
  | 
  | 
        // set autologout message | 
| 126 | 
joko | 
1.3 | 
        //$tpl = array( 'idle_time' => $max_idle_time / 60, ); | 
| 127 | 
  | 
  | 
        //$site_state[message] = getlt('table/notify/autologout', $tpl); | 
| 128 | 
  | 
  | 
        //$site_state[_autologout] = array( langkey => getlt('table/notify/autologout', $tpl); | 
| 129 | 
joko | 
1.2 | 
        // throw user to (re)login-page | 
| 130 | 
  | 
  | 
        //$site->redirect( getlink('/pub/login/') ); | 
| 131 | 
joko | 
1.3 | 
        $this->site->user->preLogout(1); | 
| 132 | 
  | 
  | 
        $this->site->request->overrideRequestIdentifier('/home/logout/'); | 
| 133 | 
joko | 
1.2 | 
      } | 
| 134 | 
joko | 
1.1 | 
     | 
| 135 | 
  | 
  | 
  }   | 
| 136 | 
  | 
  | 
 | 
| 137 | 
  | 
  | 
} | 
| 138 | 
  | 
  | 
 | 
| 139 | 
  | 
  | 
?> |