/**********************************************************************************************************************
dbsession ver. 1.0
***********************************************************************************************************************
dbsession ver. 1.0 writen by Xawiers ( xawiers@xawiers.ods.org )
Thanks to DzHiBaS
function list:
int users_online($who = "all", $interval=1800)
int user_logged_in()
bool logout() // allways true;
void user_login($userID)
History:
2002.09.08 - Xawiers
First dbsession release
***********************************************************************************************************************
Example of code:
/code
include_once("db.class.php");
$DB_HOST = "localhost";
$DB_USER = "root";
$DB_PASSWD = "";
$DB_DBNAME = "userdb";
$g_db = new db();
include_once("dbsession.php");
session_start();
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}
echo $_SESSION['count'];
?>
To continue, >click here
/endcode
***********************************************************************************************************************
Table structure:
CREATE TABLE session (
id char(32) NOT NULL default '',
LastAction int(10) NOT NULL default '0',
ip char(15) NOT NULL default '',
userID mediumint(9) default NULL,
PRIMARY KEY (id),
KEY id (id)
) TYPE=INNODB;
CREATE TABLE session_vars (
session varchar(32) NOT NULL default '',
value varchar(255) default NULL,
id mediumint(8) unsigned NOT NULL auto_increment,
PRIMARY KEY (id),
UNIQUE KEY sessionID (session),
UNIQUE KEY id (id)
) TYPE=INNODB;
**********************************************************************************************************************/
session_module_name("user");
// ** session processing functions ** //
function killold() {
global $g_db;
$result = $g_db->get_result("SELECT vars.id FROM session AS sess, session_vars AS vars WHERE sess.id=vars.session AND sess.LastAction < ".(time() - 3600));
if (is_array($result)) {
while (list($key,$val) = each($result)) {
$g_db->query("DELETE FROM session_vars WHERE id=".$val['id']);
}
}
$g_db->query("DELETE FROM session WHERE LastAction < ".(time()-3600));
$g_db->query("UPDATE session SET userID=NULL WHERE LastAction < ".(time()-900));
}
function valid_session($sess) {
global $g_db;
killold();
if (!$sess) return 0;
$tmp = $g_db->get_result("SELECT * FROM session WHERE id='$sess'");
return $tmp;
}
function begin_session($session) {
global $g_db;
$g_db->query("INSERT INTO session VALUES ('".$session."',".time().",'".$_SERVER['REMOTE_ADDR']."',NULL)");
}
function s_touch($sess) {
global $g_db;
$g_db->query("UPDATE session SET LastAction=".time()." WHERE id='$sess'");
}
function demand_session($session) {
if (!valid_session($session)) {
begin_session($session);
} else {
s_touch($session);
}
}
function open ($save_path, $session_name) {
global $id, $sess_save_path, $sess_session_name;
$sess_save_path = $save_path;
$sess_session_name = $session_name;
demand_session(session_id());
return true;
}
function close() {
return(true);
}
function read ($id) {
global $g_db, $sess_save_path, $sess_session_name;
$result = $g_db->get_array("SELECT value FROM session_vars WHERE session='$id'");
if (!empty($result)) {
return $result["value"];
} else {
return "";
}
}
function write ($id, $sess_data) {
global $g_db;
$sis = $g_db->get_result("SELECT * FROM session_vars WHERE session='$id'");
if (!empty($sis)) {
$g_db->query("UPDATE session_vars SET value='$sess_data' WHERE session='$id'");
} else {
$g_db->query("INSERT INTO session_vars (session, value) VALUES ('$id', '$sess_data')");
}
return true;
}
function destroy ($id) {
global $g_db;
$g_db->query("DELETE FROM session WHERE id='$id'");
$g_db->query("DELETE FROM session_vars WHERE session='$id'");
return(true);
}
function gc ($maxlifetime) {
killold();
return true;
}
// ** end of session processing functions ** //
function user_login($userID) {
global $g_db;
demand_session(session_id());
$g_db->query("UPDATE session SET userID = '$userID' WHERE id='".session_id()."'");
}
function logout() {
global $g_db;
$g_db->query("DELETE FROM session WHERE id='".session_id()."'");
$g_db->query("DELETE FROM session_vars WHERE session='".session_id()."'");
return true;
}
function user_logged_in() {
global $g_db;
killold();
$result = $g_db->get_array("SELECT userID FROM session WHERE id='".session_id()."'");
if (!empty($result['userID'])) {
return $result['userID'];
} else {
return false;
}
}
function users_online($who = "all", $interval=1800) {
global $g_db;
switch ($who) {
case "all":
$query = "SELECT COUNT(*) AS kiek FROM session WHERE LastAction > ". (time()-$interval);
break;
case "registered":
$query = "SELECT COUNT(*) AS kiek FROM session WHERE userID IS NOT NULL AND LastAction > ". (time()-$interval);
break;
default:
$query = "SELECT COUNT(*) AS kiek FROM session WHERE userID='".$who."' AND LastAction > ". (time()-$interval);
break;
}
$result = $g_db->get_array($query);
if ($result) {
return $result['kiek'];
} else {
return false;
}
}
session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");
?>