Hallo!
Ich arbeite zur Zeit an einem Session-Handler und würde gerne mal zu diesem Entwurf einige Meinungen hören bzgl. Funktionalität / Sicherheit:
Danke!
Ich arbeite zur Zeit an einem Session-Handler und würde gerne mal zu diesem Entwurf einige Meinungen hören bzgl. Funktionalität / Sicherheit:
PHP-Code:
<?php
final class session
{
# Initialisierungsfunktion, muss manuell aufgerufen werden
static public function loadsessionmanager()
{
# Achtung bei session.auto_start!
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 50);
ini_set('session.save_handler', 'user');
ini_set('session.gc_maxlifetime', 3600 * 24 * 8);
ini_set('session.cookie_lifetime', 3600 * 24 * 7);
session_set_save_handler(array("session", "on_session_start"), array("session", "on_session_end"),
array("session", "on_session_read"), array("session", "on_session_write"),
array("session", "on_session_destroy"), array("session", "on_session_gc"));
session_start();
session_regenerate_id(false);
return;
}
static public function on_session_start()
{
return true;
}
static public function on_session_end()
{
return true;
}
static public function on_session_read($key)
{
$res = DB::query('SELECT session_data FROM sessions WHERE session_id = "' . mysql_real_escape_string($key) . '";');
$obj = mysql_fetch_object($res);
return ($obj->session_data);
}
static public function on_session_write($key, $val)
{
# Session Fixation vermeiden, eine Session-ID ist nur eine Woche
# gültig, dieser Gültigkeitszeitraum wird nicht aktualisiert!
# Da dann bereits eine neue ID erstellt wurde
$query = 'INSERT INTO sessions (session_id, session_data, session_time) VALUES ('
. '"' . mysql_real_escape_string($key) . '",'
. '"' . mysql_real_escape_string($val) . '",'
. 'UNIX_TIMESTAMP() ) '
. 'ON DUPLICATE KEY UPDATE '
. 'session_data="' . mysql_real_escape_string($val) . '";';
mysql_query($query);
return true;
}
static public function on_session_destroy($key)
{
return DB::query('DELETE FROM sessions WHERE session_id="'.$key.'"');
}
static public function on_session_gc($max_lifetime)
{
DB::query('DELETE FROM sessions WHERE session_time + "' . mysql_real_escape_string($max_lifetime) . '" < UNIX_TIMESTAMP()');
return true;
}
}
?>
Code:
# SQL-DUMP: CREATE TABLE `sessions` ( `session_id` char(32) collate latin1_general_ci NOT NULL, `session_data` text collate latin1_general_ci NOT NULL, `session_time` int(10) NOT NULL default '0', PRIMARY KEY (`session_id`), KEY `t_stamp` (`session_time`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Kommentar