ID:               16043
 Updated by:       [EMAIL PROTECTED]
-Summary:          $_SESSION can't use in PHP 4.1.2
 Reported By:      [EMAIL PROTECTED]
-Status:           Duplicate
+Status:           Closed
 Bug Type:         Session related
 Operating System: Windows XP
 PHP Version:      4.1.2
 New Comment:

Oops,  this is fixed in CVS and will be fixed in 4.2.0 also.


Previous Comments:
------------------------------------------------------------------------

[2002-03-14 18:58:34] [EMAIL PROTECTED]

I can confirm this with w2ksp2 + apache 1.3.23

------------------------------------------------------------------------

[2002-03-14 15:58:47] [EMAIL PROTECTED]

Sample scripts to show symptoms.

The following script shows that NO session data is stored when you use
the new $_SESSION variables only as described in the PHP manual:
__________________________________________________
<html><head><title>Simple PHP Session Test</title></head>
<body>
Testing PHP Sessions...<p>

<?php

error_reporting(E_ALL);
session_start();

echo "Values at start of script:<br>";
foreach($_SESSION as $key => $value) {
   echo "\$_SESSION['$key'] => '$value'<br>";
}

//Set/Increment Counter
if ( !array_key_exists('counter', $_SESSION) ) {
   $_SESSION['counter'] = 0;
} else {
   $_SESSION['counter']++;
}

echo "Values at end of script:<br>";
foreach($_SESSION as $key => $value) {
   echo "\$_SESSION['$key'] => '$value'<br>";
}


?>
</body>
</html>
__________________________________________________


And the modified version of this script uses the older
$HTTP_SESSION_VARS variable along with session_register(), to show that
session_register() creates the initial instance of a session variable,
but no updates occur after that.  This is the best I've been able to do
with sessions in 4.1.2, so it's pretty useless at this point.
__________________________________________________
<html><head><title>Simple PHP Session Test</title></head>
<body>
Testing PHP Sessions...<p>

<?php

error_reporting(E_ALL);
session_start();

echo "Values at start of script:<br>";
foreach($HTTP_SESSION_VARS as $key => $value) {
   echo "\$HTTP_SESSION_VARS['$key'] => '$value'<br>";
}

//Set/Increment Counter
if ( !array_key_exists('counter', $HTTP_SESSION_VARS) ) {
   $counter = 0;
   session_register('counter');
} else {
   $HTTP_SESSION_VARS['counter']++;
}

echo "Values at end of script:<br>";
foreach($HTTP_SESSION_VARS as $key => $value) {
   echo "\$HTTP_SESSION_VARS['$key'] => '$value'<br>";
}


?>
</body>
</html>
__________________________________________________

P.S.  For what it's worth, session files ARE created in the
session.save_path directory, but other than the latter script, the
files are always 0 bytes and completely empty.  Hope this helps track
down the bug.

------------------------------------------------------------------------

[2002-03-14 14:37:56] [EMAIL PROTECTED]

Also applies to NT 4.0 (sp6a) both Module and CGI $_SESSION 
and also $HTTP_SESSION_VARS are dead.  From what I can tell 
the sess files get created in tmp ok, however nothing ever 
gets written to it.

------------------------------------------------------------------------

[2002-03-14 10:27:13] [EMAIL PROTECTED]

thank you for reply...
I test the $_SESSION use those 3 PHP file...

1.php
===============================
<?php
session_start();
echo '<a href=2.php>TEST</a>';
echo '<hr>SESSION<br>';
foreach($_SESSION as $k => $v)
        echo "$k => $v<br>";
$_SESSION['a']='a';
?>
===============================
2.php
===============================
<?php
session_start();
echo '<a href=3.php>TEST</a>';
echo '<hr>SESSION<br>';
foreach($_SESSION as $k => $v)
        echo "$k => $v<br>";
$_SESSION['b']='b';
?>
===============================
3.php
===============================
<?php
session_start();
echo '<a href=1.php>TEST</a>';
echo '<hr>SESSION<br>';
foreach($_SESSION as $k => $v)
        echo "$k => $v<br>";
$_SESSION['c']='c';
?>
===============================
very simple...
I like use PHP 4.1.x new features($_GET, $_POST, $_SESSION... etc), so
I care about the $_SESSION can right work!

------------------------------------------------------------------------

[2002-03-13 20:33:36] [EMAIL PROTECTED]

Have the same issue running the following config:
* Windows 2000 SP2
* Apache 1.3.23 for Windows
* PHP 4.1.2 Apache SAPI module

Everything works fine with PHP 4.1.1 in place.  Swapping in PHP 4.1.2,
sessions break.  It appears possible to store session variables
INITIALLY using session_register(), but no updates to session variables
are ever stored in the session file.

Attempting to follow the PHP documentation and just use
$_SESSION--avoiding using session_register() altogether--does not work
at all.  Attempting to create a session variable by doing something
like

________________________________________
<?php
// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
if (!isset($_SESSION['count'])) {
   $_SESSION['count'] = 0;
} else {
   $_SESSION['count']++;
}
?>
________________________________________

as written in the documentation fails miserably.  (Note the
documentation neglects the session_start() call, which I added since I
did not have autostart enabled.)

BACKGROUND:
Here is how I swapped 4.1.2 into place to test this (what I do whenever
a new release comes out now):

* All Internet-related info is stored under \InetPub
  (holdover from my IIS days)
* Apache is configured to look in \InetPub\PHP\SAPI for
  the PHP4APACHE.DLL file.  All appropriate settings in
  HTTPD.CONF file set for running PHP as module (vs. CGI).
* When a new PHP version is released, I
  1. Download the .ZIP file
  2. Decompress into \InetPub (in this case creating
     \InetPub\php-4.1.2-Win32\)
  3. Copy PHP4TS.DLL into .\SAPI directory so it is in the
     the same directory with PHP4APACHE.DLL.
  4. Compare new PHP.INI-DIST and PHP.INI-RECOMMENDED
     against my %SYSTEMROOT%\PHP.INI file, and make
     adjustments accordingly (like the new cgi. entries).
  5. Shutdown Apache service.
  6. Rename '\InetPub\PHP' to '\InetPub\PHP v4.1.1'
  7. Rename '\InetPub\php-4.1.2-Win32' to '\InetPub\PHP'
  8. Restart Apache service.
  9. Test the new config by running a VER.PHP file which
     contains
    ________________________________________
    <?php
        phpinfo();
    ?>
    ________________________________________
 10. Run various test scripts to validate sessions, etc.,
     looking at the session files created to make sure
     variables are created/updated/etc.

Testing an old version against a new version is then simple.  I simply

  1. Shutdown Apache service.
  2. Rename '\InetPub\PHP' to '\InetPub\PHP_version_in_use'
  3. Rename '\InetPub\PHP_version_to_test' to '\InetPub\PHP'
  4. Restart Apache service.

and run the same tests.

With the introduction of PHP 4.1.0, I have started changing my PHP test
scripts to make use of $_SESSION.  If you would like, I can provide a
set that may help show what's going on (or not going on in this case).

In a nutshell, currently PHP v4.1.2 is useless for session management,
at least the Apache for Windows SAPI module.  Due to the various
security concerns with CGIs, etc., I am hesitant to go back to that. 
If I find time to test the CGI version, I'll post here.

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/16043

-- 
Edit this bug report at http://bugs.php.net/?id=16043&edit=1

Reply via email to