Jump to content

session_set_save_handler "write"


ndorfnz

Recommended Posts

Working on changing sessions to be stored in db. Using example I found on Internet.

 

Works for the most part, however it's driving me nuts  :wtf: that my username is being stored as data|s:6:"bertha"; vs. just the username bertha.

 

I've read where the session_set_save_handler is "serializing" the data by default.

 

In any case, I want to get at the username entered to ensure I keep my users logged in, etc. I've tried to "unserialize" the entry but it always returns false!

 

MANY THANKS!!

 

The code is below:

//************************************************************************************* 
//Variables used through out the script - CHANGE TO A GENERAL FILE AND INCLUDE IT... 
//**************************************************************** 
$server      = "blah";      // Server Name 
$userid      = "blah";               // Username 
$pass        = "blah";                      //Password 
$database    = "blah";           // Database Name 
//**************************************************************** 

//**************************************************************** 
//Make server and database connections 
//**************************************************************** 
$con = mysql_connect("$server",$userid,$pass) 
        or die ("Connection Error to Server"); 
$db = mysql_select_db("$database",$con) 
        or die("Connection Error to Database"); 
//========================================================================================== 
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; 

     } 
      
      
     //READ DATA 
     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 = mysql_query($sql);                            
           $a = mysql_num_rows($rs); 

           if($a > 0) { 
             $row = mysql_fetch_assoc($rs); 
             $data = $row['session_data']; 
           } 

                       return $data; 

        } 
         
        //WRITE DATA 
        function write( $id, $data ) { 

            //unserialize($data); 
             
            //echo $data; 
             
         // Build query                 
         $time = time() + $this->life_time; 

         $newid = mysql_real_escape_string($id); 
         //base64_encode(serialize 
         $newdata = mysql_real_escape_string($data); 
          
          

         $sql = "REPLACE `sessions` (`session_id`,`session_data`,`expires`) VALUES('$newid','$newdata', $time)"; 

         $rs = mysql_query($sql); 
          
         //var_dump($_SESSION); 

         return TRUE; 

      } 
       
       
       
      function destroy( $id ) { 

         // Build query 
         $newid = mysql_real_escape_string($id); 
         $sql = "DELETE FROM `sessions` WHERE `session_id` = '$newid'"; 

         mysql_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();'; 

         mysql_query($sql); 

         // Always return TRUE 
         return true; 

      }     

}?> 

 

The calling page contains:

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

 

Link to comment
https://forums.phpfreaks.com/topic/210050-session_set_save_handler-write/
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.