[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Phpgroupware-cvs] phpgwapi/inc/class.sessions_db.inc.php, 1.19
From: |
nomail |
Subject: |
[Phpgroupware-cvs] phpgwapi/inc/class.sessions_db.inc.php, 1.19 |
Date: |
Thu, 30 Dec 2004 07:47:31 +0100 |
Update of /phpgwapi/inc
Added Files:
Branch:
class.sessions_db.inc.php
date: 2004/12/30 06:47:31; author: skwashd; state: Exp; lines: +31 -40
Log Message:
new HEAD
=====================================================================
<?php
/**
* Session management based on database
* @author Dan Kuykendall <address@hidden>
* @author Joseph Engo <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_db.inc.php,v 1.19 2004/12/30 06:47:31
skwashd Exp $
*/
/**
* Session management based on database
*
* @package phpgwapi
* @subpackage accounts
*/
class sessions extends sessions_
{
function sessions()
{
$this->sessions_();
}
function read_session($sessionid)
{
$this->db->query("SELECT * FROM phpgw_sessions WHERE
session_id='" . $this->sessionid . "'",__LINE__,__FILE__);
$this->db->next_record();
return $this->db->resultSet->fetchRow();
}
// This will remove stale sessions out of the database
function clean_sessions()
{
// If you plan on using the cron apps, please remove
the following lines.
// I am going to make this a config option durring
0.9.11, instead of an application (jengo)
$GLOBALS['phpgw']->db->query("DELETE FROM
phpgw_sessions WHERE session_dla <= '" . (time() -
$GLOBALS['phpgw_info']['server']['sessions_timeout'])
. "' AND session_flags
!='A'",__LINE__,__FILE__);
// This is set a little higher, we don't want to kill
session data for anonymous sessions.
$GLOBALS['phpgw']->db->query("DELETE FROM
phpgw_app_sessions WHERE session_dla <= '" . (time() -
$GLOBALS['phpgw_info']['server']['sessions_timeout'])
. "'",__LINE__,__FILE__);
}
function register_session($login,$user_ip,$now,$session_flags)
{
$GLOBALS['phpgw']->db->query("INSERT INTO
phpgw_sessions VALUES ('" . $this->sessionid
. "','".$login."','" . $user_ip . "','"
. $now . "','" . $now . "','" .
$_SERVER['PHP_SELF'] . "','" . $session_flags
. "')",__LINE__,__FILE__);
}
// 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'];
}
// This way XML-RPC users aren't always listed as
// xmlrpc.php
if ($this->xmlrpc_method_called)
{
$action = $this->xmlrpc_method_called;
}
$GLOBALS['phpgw']->db->query("UPDATE phpgw_sessions SET
session_dla='" . time() . "', session_action='$action' "
. "WHERE session_id='" .
$this->sessionid."'",__LINE__,__FILE__);
$GLOBALS['phpgw']->db->query("UPDATE phpgw_app_sessions
SET session_dla='" . time() . "' "
. "WHERE sessionid='" .
$this->sessionid."'",__LINE__,__FILE__);
return True;
}
function destroy($sessionid, $kp3)
{
if (! $sessionid && $kp3)
{
return False;
}
$GLOBALS['phpgw']->db->transaction_begin();
$GLOBALS['phpgw']->db->query("DELETE FROM
phpgw_sessions WHERE session_id='"
. $sessionid . "'",__LINE__,__FILE__);
$GLOBALS['phpgw']->db->query("DELETE FROM
phpgw_app_sessions WHERE sessionid='"
. $sessionid . "'",__LINE__,__FILE__);
$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();
}
$GLOBALS['phpgw']->db->transaction_commit();
return True;
}
/*************************************************************************\
* Functions for appsession data and session cache
*
\*************************************************************************/
function delete_cache($accountid='')
{
$account_id =
get_account_id($accountid,$this->account_id);
$query = "DELETE FROM phpgw_app_sessions WHERE loginid
= '".$account_id."'"
." AND app = 'phpgwapi' AND location =
'phpgw_info_cache'";
$GLOBALS['phpgw']->db->query($query);
}
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##')
{
$query = "SELECT content FROM
phpgw_app_sessions WHERE"
." sessionid='".$this->sessionid."' AND
loginid='".$this->account_id."'"
." AND app = '".$appname."' AND
location='".$location."'";
$GLOBALS['phpgw']->db->query($query,__LINE__,__FILE__);
$GLOBALS['phpgw']->db->next_record();
// I added these into seperate steps for easier
debugging
$data = $GLOBALS['phpgw']->db->f('content');
// Changed by Skeeter 2001 Mar 04 0400Z
// This was not properly decoding structures
saved into session data properly
// $data =
$GLOBALS['phpgw']->common->decrypt($data);
// return stripslashes($data);
// Changed by milosch 2001 Dec 20
// do not stripslashes here unless this proves
to be a problem.
// Changed by milosch 2001 Dec 25
/* do not decrypt and return if no data
(decrypt returning garbage) */
if($data)
{
$data =
$GLOBALS['phpgw']->crypto->decrypt($data);
// echo 'appsession returning: ';
_debug_array($data);
return $data;
}
}
else
{
$GLOBALS['phpgw']->db->query("SELECT content
FROM phpgw_app_sessions WHERE "
. "sessionid = '".$this->sessionid."'
AND loginid = '".$this->account_id."'"
. " AND app = '".$appname."' AND
location = '".$location."'",__LINE__,__FILE__);
$encrypteddata =
$GLOBALS['phpgw']->crypto->encrypt($data);
$encrypteddata =
$GLOBALS['phpgw']->db->db_addslashes($encrypteddata);
if ($GLOBALS['phpgw']->db->num_rows()==0)
{
$GLOBALS['phpgw']->db->query("INSERT
INTO phpgw_app_sessions (sessionid,loginid,app,location,content,session_dla) "
. "VALUES
('".$this->sessionid."','".$this->account_id."','".$appname
.
"','".$location."','".$encrypteddata."','" . time() . "')",__LINE__,__FILE__);
}
else
{
$GLOBALS['phpgw']->db->query("UPDATE
phpgw_app_sessions SET content='".$encrypteddata."'"
. "WHERE sessionid =
'".$this->sessionid."'"
. "AND loginid =
'".$this->account_id."' AND app = '".$appname."'"
. "AND location =
'".$location."'",__LINE__,__FILE__);
}
return $data;
}
}
function list_sessions($start, $order = 'ASC', $sort =
'session_lid', $all_no_sort = false)
{
$SQL_sort = strlen($sort) ? 'ORDER BY '.$sort : '';
$SQL_sort .= (strlen($sort) && strlen($order)) ? '
'.$order : '' ;
$this->db->limit_query('SELECT * FROM phpgw_sessions'
. " WHERE session_flags != 'A'
$SQL_sort", $start, __LINE__, __FILE__);
$values = array();
while ($this->db->next_record())
{
$values[] = array(
'session_id' =>
$this->db->f('session_id'),
'session_lid' =>
$this->db->f('session_lid'),
'session_ip' =>
$this->db->f('session_ip'),
'session_logintime' =>
$this->db->f('session_logintime'),
'session_action' =>
$this->db->f('session_action'),
'session_dla' =>
$this->db->f('session_dla')
);
}
return $values;
}
/*!
@function total
@abstract get number of normal / non-anonymous sessions
*/
function total()
{
$this->db->query("select count(*) from phpgw_sessions
where session_flags != 'A'",__LINE__,__FILE__);
$this->db->next_record();
return $this->db->f(0);
}
}
?>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Phpgroupware-cvs] phpgwapi/inc/class.sessions_db.inc.php, 1.19,
nomail <=