Re: session variable problem

From: Date: Tue, 29 Mar 2011 21:15:59 +0000
Subject: Re: session variable problem
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-312133@lists.php.net to get a copy of this message
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

« previous php.general (#312133) next »