Hallo
Ich wollte für eine seite eine eigene Sessionverwaltung verwenden, und habe dazu auch ein skrip im netzgefunden. Jetzt habe ich nur das Problem, dass in der funktion ms_read die session_id nicht an die Variable $sessid übergeben wird. Ich spiele mich damit schon seit zwei Tagen. Gestern hat es kurzzeitig funktioniert, heute aber wieder nicht mehr. Ich bin auf jeden Fall mit meinem Latein am Ende. Wäre nett wenn jemand helfen könnte.
Hier das Skript:
PHP
<?php
class SessionManager
{
const SESSIONNAME = 'SESSION';
const SESSIONDB = '******';
const DBUSER = '*********';
const DBPASS = '***********';
const DBSERV = 'localhost';
const DBDROP = "DROP TABLE currentsession IF EXISTS";
const DBDEFINITION = "
CREATE TABLE currentsession (
sessionID varchar(32) NOT NULL,
usrID bigint(20) NOT NULL,
variables text NOT NULL,
laccess int(14),
PRIMARY KEY (sessionID),
KEY usrID (usrID)
);";
private static $DB;
public function __construct()
{
$this->SetMySQL();
// Session-Parameter setzen
ini_set('session.use_trans_sid', 1);
ini_set('session.use_cookies', 0);
ini_set('session.gc_probability', 1);
session_module_name("user");
session_set_save_handler(array('SessionManager', 'ms_open'),
array('SessionManager', 'ms_close'),
array('SessionManager', 'ms_read'),
array('SessionManager', 'ms_write'),
array('SessionManager', 'ms_destroy'),
array('SessionManager', 'ms_gc'));
session_name(self::SESSIONNAME);
session_start();
}
private function SetTable()
{
$tbl = mysql_list_tables(self::SESSIONDB, self::$DB);
while ($t = mysql_fetch_assoc($tbl))
{
if ($t['Tables_in_'.self::SESSIONDB] == 'currentsession')
{
return;
}
}
mysql_query(self::DBDROP, self::$DB);
mysql_query(self::DBDEFINITION, self::$DB);
}
private function SetMySQL()
{
self::$DB = @mysql_connect('localhost', '*******', '********');
if (self::$DB !== FALSE)
{
$dbs = mysql_list_dbs(self::$DB);
while ($db = mysql_fetch_assoc($dbs))
{
if ($db['Database'] == self::SESSIONDB)
{
mysql_select_db(self::SESSIONDB, self::$DB);
$this->SetTable();
return;
}
}
}
die ("Datenbank '******' existiert nicht. ");
}
function ms_open($sesspath, $sessname)
{
$time = time();
$sessid = session_id();
$query = "SELECT * FROM currentsession WHERE sessionID = '$sessid'";
$RS = mysql_query($query, self::$DB);
if (mysql_num_rows($RS) == 0)
{
$query = "INSERT INTO currentsession
(sessionID, laccess)
VALUES ('$sessid', '$time')";
}
else
{
$query = "UPDATE currentsession
SET laccess = '$time'
WHERE sessionID = '$sessid'";
}
$RS = mysql_query($query, self::$DB);
return $RS;
}
function ms_write($sessid, $varis)
{
$query = "UPDATE currentsession
SET variables = '$varis'
WHERE sessionID = '$sessid'";
$RS = mysql_query($query, self::$DB);
return (bool) $RS;
}
function ms_read($sessid)
{
$query = "SELECT * FROM currentsession
WHERE sessionID='$sessid'";
$RS = mysql_query($query, self::$DB);
$arrRS = mysql_fetch_assoc($RS);
if (is_array($arrRS))
{
return $arrRS['variables'];
}
else
{
return FALSE;
}
}
function ms_destroy($sessid)
{
$query = "DELETE FROM currentsession
WHERE sessionID = '$sessid'";
$RS = mysql_query($query, self::$DB);
return (bool) $RS;
}
function ms_gc($sesslt)
{
$tStamp = time() - $sesslt;
$query = "DELETE FROM currentsession
WHERE laccess < '$tStamp'";
$RS = mysql_query($query, self::$DB);
return (bool) $RS;
}
function ms_close()
{
mysql_close(self::$DB);
}
}
new SessionManager();
?>
Alles anzeigen