Je hebt ook alle functies buiten de class gehaald. Alle functies moeten in de class.
<?php
class SessionManager {
var $life_time;
function SessionManager() {
// Read the maxlifetime setting from PHP
$this->life_time = get_cfg_var("session.gc_maxlifetime");
// Register this object as the session handler
session_set_save_handler(
array( &$this, "open" ),
array( &$this, "close" ),
array( &$this, "read" ),
array( &$this, "write"),
array( &$this, "destroy"),
array( &$this, "gc" )
);
}
function open( $save_path, $session_name ) {
global $sess_save_path;
$sess_save_path = $save_path;
// Don't need to do anything. Just return TRUE.
return true;
}
function close() {
return true;
}
function read( $id ) {
// Set empty result
$data = '';
// Fetch session data from the selected database
$time = time();
$newid = mysql_real_escape_string($id);
$sql = "SELECT `session_data` FROM `sessions` WHERE `session_id` = '$newid' AND `expires` > $time";
$rs = db_query($sql);
$a = db_num_rows($rs);
if($a > 0) {
$row = db_fetch_assoc($rs);
$data = $row['session_data'];
}
return $data;
}
function destroy( $id ) {
// Build query
$newid = mysql_real_escape_string($id);
$sql = "DELETE FROM `sessions` WHERE `session_id` = '$newid'";
db_query($sql);
return TRUE;
}
function gc() {
// Garbage Collection
// Build DELETE query. Delete all records who have passed the expiration time
$sql = 'DELETE FROM `sessions` WHERE `expires` < UNIX_TIMESTAMP();';
db_query($sql);
// Always return TRUE
return true;
}
} //deze accolade is verplaatst...
?>
En dan op de pagina's waar je het wil gaan gebruiken:
<?php
require_once('sessie.php');
$sess = new SessionManager();
session_start();
?>
En dan kan je onbeperkt naar $_SESSION schrijven. Deze zal PHP dan automatisch in de database zetten :)
Ik zou pas beginnen met sessies aan te maken wanneer je inlogt dit lost dan gelijk het probleem op. Ik ken de rest van het idee niet dus het kan zijn dat dit niet mogelijk is.
Als je je eigen session_handler in PHP instelt, betekent dat dat PHP die functies gebruikt om intern de sessie te verwerken. Hoe jij sessies gebruikt blijft gewoon hetzelfde. Je moet alleen ervoor zorgen dat session_set_save_handler wordt aangeroepen voordat je session_start aanroept. Daarna kan je sessies gebruiken zoals PHP's eigen sessies. Zie de tutorials.
Je kunt voor je sessievariabelen elke geldige naam gebruiken die je kunt verzinnen. Zoals Jelmer al zegt, door een eigen session handler te gebruiken verandert er alleen iets aan de afhandeling van de sessievariabelen, niet aan hoe je ze in je scripts gebruikt.