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
In je class roep je een functie db_query aan, maar die bestaat (op het moment van aanroepen) niet. Als die in een ander bestand staat, moet je ook dat bestand voor session_start() inladen.
In hoeverre is het gebruik van een eigen sessionhandler met db veiliger t.o.v. het gebruik van de standaard php-sessionhandler ?
Ik gebruik nu de standaard i.c.m. met een session-init bestand met zelfgedefinieerde session-variabelen erin. Ik denk er namelijk ook over om een eigen sessionhandler te gaan gebruiken (mijn session.auto_start is OFF).
Wolf Wolf op 26/05/2010 15:45:47

In hoeverre is het gebruik van een eigen sessionhandler met db veiliger t.o.v. het gebruik van de standaard php-sessionhandler?

Vaak is het zo dat bij shared hosting de sessies van meerdere sites op dezelfde plek worden opgeslagen. Soms (alhoewel, ik denk stiekem dat het eerder vaak is) is het ook mogelijk om sessies van andere sites op dezelfde server te openen en te bewerken.

Als je shared hosting webserver goed is ingesteld, kan je ook veilig session_save_path veranderen naar een andere map waar alleen jouw gebruiker bij kan. Of je verplaatst je sessies naar de database, waar alleen jij het wachtwoord van weet.
Iemand die me kan helpen zo dat ik een werkende sessie handler heb?
Tot nu toe doet beide het niet :S
Ligt het probleem aan de sessionhandlers die je probeert, of bij de manier waarop je ze probeert te gebruiken. Heb je je script wel al werkend met PHP's standaard sessionhandler?
Het zal hoogstwaarschijnlijk aan mij liggen.
maar ik heb het volgende gedaan:

require 'session.php';

echo 'Een sessie aanmaken: Userid';

$_SESSION['userid'] = 1;

session_write_close(); 


als ik nu in de database kijk staat er niets in.
Toen ik de eerste keer de pagina bezocht stond er wel iets omdat ik dit had:

$_SESSION['blaat'] = 'LOL';
$_SESSION['schaap'] = 1;

Maar als ik mijn eigen sessie er in zet doet hij het niet :S
Wat doe ik fout..?

Nu zet hij blaat en schaap ook niet meer in de database. :S

Reageren