Hallo.

ik ben even aan het kijken hoe het zit.
ik volgde deze pagina:

sessie.php
<?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 write( $id, $data ) {
         // Build query                
         $time = time() + $this->life_time;
         $newid = mysql_real_escape_string($id);
         $newdata = mysql_real_escape_string($data);
         $sql = "REPLACE `sessions` (`session_id`,`session_data`,`expires`) VALUES('$newid', '$newdata', $time)";
         $rs = db_query($sql);
         return TRUE;
}

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;
}


?>


Maar hoe maak ik nu een nieuwe sessie aan?
en hoe delete ik weer een sessie?
en hoe update ik een sessie?

bedankt xD
Gewoon met de normale functies geloof ik. Dus [php]session_start[/php] voor het openen etc.
dit werkt niet:

require_once("sessie.php");
$sess = new SessionManager();
session_start();

session_set_save_handler(write);
$id = 1000;
$data = 'Test';
write( $id, $data );
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 write( $id, $data ) {
// Build query
$time = time() + $this->life_time;
$newid = mysql_real_escape_string($id);
$newdata = mysql_real_escape_string($data);
$sql = "REPLACE `sessions` (`session_id`,`session_data`,`expires`) VALUES('$newid', '$newdata', $time)";
$rs = db_query($sql);
return TRUE;
}

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 :)
Maar hoe maak ik dan nu BV een nieuwe sessie aan als iemand ingelogd is?


BV:
<?php 
if($pass == $pass2){
// wat moet hier dan om de sessie aan te maken
}
?>
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.
ik moet gewoon weten hoe ik de sessie kan aanmaken voor de 3e x
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.
ok, maar moeten die sessies nog bepaalde namen hebben of kan ik dat zelf verzinnen?
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.
Ik probeer het even online te zetten maar ik krijg de volgende foutmelding:

Fatal error: Call to undefined function db_query() in ...................../sessie.php on line 36

wat doe ik verkeerd...?


<?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 write( $id, $data ) {  
         // Build query                  
         $time = time() + $this->life_time;  
         $newid = mysql_real_escape_string($id);  
         $newdata = mysql_real_escape_string($data);  
         $sql = "REPLACE `sessions` (`session_id`,`session_data`,`expires`) VALUES('$newid', '$newdata', $time)";  
         $rs = db_query($sql);  
         return TRUE;  
}  

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... 


?>

Reageren