On 3/25/2011 12:09 PM, markb wrote:
Very rusty with PHP.
We moved our web site to a new hosting service (godaddy). PHP changed
from 4x to 5.2.17.
I can no longer change $_SESSION variables after the first use.
First call to form - start session create variables
Second call - can read variables, change existing ones (but they do not
persist to next call) - cannot create new variable without an error

Using $_SESSION['varname'] always
session.auto_start off
register_globals off
session.use_only_cookies off

I assume this is setting difference but I can't seem to find it.




OK, here's is what is happening. I think my web hosting service is just really slow. I am storing the cookies in a unique directory. I create the directory when I start the session. It appears to take a long time for the directory creation to occur. The code is posted below. You can test it at this link: http://www.injection-moldings.com/upload%20test1.php

1.  First time you call,
        the session starts,
        variables assigned to $_SESSION  -
         but no session ID ([PHPSESSID]) yet
2. Reload the page,
         previous $_SESSION data lost
but "markdir" value appears in cookie which is the hash value for the session path.
        Still no session ID
3. Reload  -
        session ID appears [PHPSESSID]
        session data starts saving  $_SESSION['test'] will increment



Code:

<?php
ob_start(); //start output buffering



// 10-2007 added java download text to first page



if(!isset($_COOKIE['makedir']) ) {
                

                $unhashdir = startNewSession(); 
                cfinitsession($_SESSION) ;              
                $_SESSION['mystep'] = 0;
                $_SESSION['SUBMIT'] == 'auto';
                $_POST = array();       
                setCookie('pagereload','0',0,'/');
                $_COOKIE['pagereload'] = 0;
                $_SESSION['pagereload']=0;
                echo '<p>starting new session';
} else {

        $unhashdir = '';
        if (!setupSession1($_COOKIE['makedir'],$unhashdir)) {
                die ('Could not start upload session');
        
                exit;
        }
        
        $sess = session_start(); //
        echo '<p>session running='.$sess;
                
}


/// hideme
echo '<pre>';
echo '<p>request uri'.$_SERVER['REQUEST_URI'];
if ($_SERVER['REQUEST_METHOD']=="POST") {
        $v = print_r($_POST,true);
        echo '<p>post:<br>'.$v;
}

        $v = print_r($_COOKIE,true);
        echo '<p>Cookie:<br>'.$v;
        
        $v = print_r($_SESSION,true);
        echo '<p>Session:<br>'.$v;
        echo '</pre>';
/// end hideme


if(isset($_COOKIE["PHPSESSID"]))
  {
    echo '<p></p>session started';
        if (isset( $_SESSION['test'])  ) {
           $_SESSION['test'] ++;
                } else {
                        $_SESSION['test'] =0;
                }
  }
  else
  {
    echo "<p>no session id";
  }

exit;

// **********************************************//
// Functions AND Sub-routines ///////////////////////////////////////////////
 // **********************************************//



function setupSession1($mydir,&$plaindir) {

        // change the session save directory to our new folder
        // $ mydir is encrypted
        // $plaindir is unencrypted if available
        $rt = false;
        if ($plaindir != '' ) {
                $mydir = $plaindir;
        } else {
                $plaindir = 'upload/'.cfFindHashDir($mydir) ;
                $mydir = $plaindir;
        }
        if ($mydir == '') {
                $rt = false;
        } else {
$tempdir = $_SERVER['DOCUMENT_ROOT']."/".$mydir.'/tmpZrtg/fe234/dafsksfe' ;
        
                        if( !is_dir($tempdir) ) {
                                Rmkdir($tempdir);                               
                        }
                  if( is_dir($tempdir) ){
                                ini_set( 'session.save_path',$tempdir );
                
ini_set('session.gc_maxlifetime',(60*3600*5.0)); //5.0 hours keep session alive X hours
                                ini_set('session.gc_probability',1); //never 
empty the garbage???
                                ini_set('session.gc_divisor',1);

                
                        }
                $rt = is_dir($tempdir);
        }
        return $rt;
}       

function startNewSession() {
        $unhashdir = makeSaveDir();             
        // save SaveDir encrypted
        //log_error('New directory ='.$unhashdir);
                $newdir =cfSha256($unhashdir); //*&^
                
        //echo '<p>New session started!!:'.$sess." id:".session_id(); //
                                
                $_SESSION['SaveDir'] = $newdir;
                ini_set("session.use_only_cookies", 0);  //do not use cookies 
only
                ini_set('session.cookie_secure',true);
                ini_set('session.use_cookies',0);
                
                        setupSession1('',$unhashdir);                           
                        
                $sess = session_start();
                
                 setcookie('makedir',$newdir,0,'/');//(time()+(3600*6)),"/");
        return $unhashdir;      
}


function cfinitvar(&$var,$value) {
  if (!isset($var) ) {
          $var= $value;
         }
}

//function cfinitsession(&$_SESSION) {
function cfinitsession($_SESSION) {
   cfinitvar($_SESSION['file_upload_number'],'');
  cfinitvar($_SESSION['email_fld'],'');
  cfinitvar($_SESSION['first_name_fld'],'');
  cfinitvar($_SESSION['position_fld'],'');
  cfinitvar($_SESSION['company_fld'],'');
  cfinitvar($_SESSION['addr1_fld'],'');
  cfinitvar($_SESSION['addr2_fld'],'');
  cfinitvar($_SESSION['city_fld'],'');
  cfinitvar($_SESSION['state_fld'],'');
  cfinitvar($_SESSION['zip_fld'],'');
  cfinitvar($_SESSION['country_fld'],'');
  cfinitvar($_SESSION['phone_fld'],'');
  cfinitvar($_SESSION['fax_fld'],'');
  cfinitvar($_SESSION['quote_ref_fld'],'');
  cfinitvar($_SESSION['quote_due_fld'],'');
  cfinitvar($_SESSION['last_name_fld'],'');
  cfinitvar($_SESSION['SaveDir'],'');
  cfinitvar($_SESSION['pagereload'],'');
 // cfinitvar($_SESSION[''],'');

 $_SESSION['mystep'] = intval(0) ;
                $_SESSION['SUBMIT'] = 'auto';
                $_SESSION['SUBMIT2'] = '';
                $_SESSION['goTo'] = '';
                $_SESSION['intoverride'] = false;

}


 function makeSaveDir() {
        
        $strt = false;
        $timestamp =  strtotime("now");
        $newdir = "upload/$timestamp";
        
        if(!is_dir($newdir)) {
                $oldumask = umask();
                mkdir($newdir, 0722, true);
                umask($oldumask);
        }
        return $newdir;
}



function cfFindHashDir($dir) {
        //$dir is encrypted with cfSha256
        
        $rt = '';
        $dirar = cfscandir( PATHTOUPLOAD,true,false) ;
        //go backwards through dir names to find it
        $f = print_r($dirar,true);
        //log_error('dirar'.$f);
        //log_error('dirar size'.count($dirar));
        //log_error('Dir = '.$dir);
        foreach ($dirar as $dirname=>$size) {
                //log_error($dirname.'-'.cfSha256($dirname));
                if ( cfSha256('upload/'.$dirname) == $dir  ) { $rt = $dirname; 
break; }
        }
        
        return $rt;
}

function cfSha256($data) {
        return (base64_encode(bin2hex(mhash(MHASH_SHA256,$data) ) ) );
}       

        
function cfscandir( $dir,$listDirectories=false, $skipDots=true) {
    $dirArray = array();
// echo '<P>-- dir='.$dir.'!!<br>'; 
        if (file_exists($dir)) {
    if ($handle = opendir($dir)) {
        while (false !== ($file = readdir($handle))) {
            if (($file != "." && $file != "..") || $skipDots == true) {
                                
if($listDirectories == false) { if(is_dir($dir."/".$file)) { continue ; } }
                                  $dirArray[$file]  = filesize($dir.$file) ;
            }
        }
        closedir($handle);
    }
         }
    return $dirArray;
}

function Rmkdir($path){  //recursive make directory
    $exp=explode("/",$path);
    $way='';
    foreach($exp as $n){
        $way.=$n.'/';
        if(!file_exists($way)) {
                  //      echo "<br>hello<br>making dir:".$way;
                 //    echo "<br>root:".$_SERVER['DOCUMENT_ROOT'];
                        //  echo "<br>self:".$_SERVER["PHP_SELF"];
                        
            mkdir($way, 0777);
                                }
    }
}

?>

--
Mark B

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

Reply via email to