Hello all,

Due to my need to have the whole session data file encrypted. I am thinking about 
using custom session functions.
Saving in a database is not an option. 

Anyway, I have modified the session example on php.net to perform encoding and 
decoding. 
I have tested the session with data and all seems ok. However as itâs such a crucial 
part. I wanted to check if anybody has any thoughts or warnings on the code below.

Iâm not sure if any other files are stored in the tmp folder so I included the 
ereg("sess_[a-zA-Z0-9]*", $tmp_files) to check the files before deleting in the 
garbage function.
 
Thanks 

Will

<?
function open($save_path, $session_name) 
{
        global $sess_save_path, $sess_session_name;
           
        $sess_save_path = $save_path;
        $sess_session_name = $session_name;
        return(true);
}

function close() 
{
        return(true);
}

function read($id) 
{
  global $sess_save_path, $sess_session_name;
        
        $sess_file = "$sess_save_path/sess_$id";
        if ($fp = @fopen($sess_file, "r")) {
                $sess_data = fread($fp, filesize($sess_file));
   
                $iv = âivâ; // obscured due to this email
                $key = "secret phrase"; // obscured due to this email
                
                $td = mcrypt_module_open('blowfish', '', 'cbc', '');  
                $ks = mcrypt_enc_get_key_size($td);      
                $key = substr(md5($key), 0, $ks);                                      
                                 
        
                mcrypt_generic_init($td, $key, $iv);            
                $dec_sess_data = mdecrypt_generic($td, $sess_data);             
                mcrypt_generic_deinit($td);
                
                mcrypt_module_close($td);               

                return $dec_sess_data;   
        
        } else {
                return(""); // Must return "" here.
        }

}

function write($id, $sess_data) 
{
        global $sess_save_path, $sess_session_name;             
           
                $iv = âivâ;
                $key = "secret phrase";
                
                $td = mcrypt_module_open('blowfish', '', 'cbc', '');      
                $ks = mcrypt_enc_get_key_size($td); 
                $key = substr(md5($key), 0, $ks);                                      
                                 
        
                mcrypt_generic_init($td, $key, $iv);                                   
                         
                $enc_sess_data = mcrypt_generic($td, $sess_data); 
                mcrypt_generic_deinit($td);                             
                                
                mcrypt_module_close($td); 
  
        $sess_file = "$sess_save_path/sess_$id";
        if ($fp = @fopen($sess_file, "w")) {
                return(fwrite($fp, $enc_sess_data));
        } 
        else {
                return(false);
        }

}

function destroy($id) 
{
        global $sess_save_path, $sess_session_name;
       
        $sess_file = "$sess_save_path/sess_$id";
        return(@unlink($sess_file));
}

function gc ($maxlifetime) { 
   global $sess_save_path, $sess_session_name;
                   
        $fp = opendir("$sess_save_path/");      
        while($tmp_files = readdir($fp)) {
        if(ereg("sess_[a-zA-Z0-9]*", $tmp_files) AND 
(fileatime("$sess_save_path/$tmp_files") + $maxlifetime) < time()) 
        @unlink("$sess_save_path/$tmp_files");
        }               
        closedir($fp);  

  return true;
}


session_set_save_handler("open", "close", "read", "write", "destroy", "gc");

session_start();


//$_SESSION['testing1'] = 'hello there';

//$_SESSION['testing2'] = array("test1" => array("test1_1","test1_2"), "test2"  => 
array("test2_1","test2_2"));

echo(â$_SESSION[testing1]<br>");

foreach($_SESSION['testing2'] as $key => $value) {
        echo("<br>$key - ");
        foreach($value as $value2) echo("$value2, ");           
}
?>


I've stopped 2,456 spam messages. You can too!
One month FREE spam protection at www.cloudmark.com

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to