ID: 22245
Updated by: [EMAIL PROTECTED]
-Summary: Unserialize Problem with References:
Reported By: goth at php-resource dot de
-Status: Open
+Status: Verified
Bug Type: Session related
Operating System: LINUX
-PHP Version: 4CVS-2003-02-16 (stable)
+PHP Version: 4.3.3RC2-dev, 5.0.0b2-dev
Assigned To: sas
New Comment:
Even as you think I'm arrogant and dumb, I'm marking this as verified.
(In hope you really get a heart-attack..>:)
Here's a complete test case script:
<?php
session_start();
if (isset($_GET['destroy'])) {
session_destroy();
header("Location: {$_SERVER['PHP_SELF']}");
exit();
}
echo "register_globals: ", ((ini_get('register_globals')) ? 'On' :
'Off'), "<br />";
if (!isset($_SESSION["A"]) && !isset($_SESSION["B"])) {
$_SESSION["A"]=10;
$_SESSION["B"]=&$_SESSION["A"];
}
echo "BEFORE: A=".$_SESSION["A"]."<br />";
echo "BEFORE: B=".$_SESSION["B"]."<br />";
$_SESSION["A"]++;
echo "AFTER: A=".$_SESSION["A"]."<br />";
echo "AFTER: B=".$_SESSION["B"]."<br />";
echo "<br /><a href='{$_SERVER['PHP_SELF']}?destroy=1'>destroy
session</a> after changing register_globals setting to see the bug in
effect";
echo "<br />(and reload the page couple of times..)";
?>
When register_globals = On -> Works.
When register_globals = Off -> Does not work.
Previous Comments:
------------------------------------------------------------------------
[2003-05-26 21:55:27] gschine at middlebury dot edu
we have had extensive experience with this, and it
seems that the above bug only occurs while
register_globals is OFF. when it's on everything works
as expected.
------------------------------------------------------------------------
[2003-05-20 17:53:40] goth at php-resource dot de
Yes I am very sure that php4-STABLE-200302071830 worked properly with
the stated code above ... !
Another Question ... what does R:1 mean in this serialization??
A|i:10;B|R:1;
------------------------------------------------------------------------
[2003-05-20 17:38:00] [EMAIL PROTECTED]
Not reproducible. I tried this with 4.2.3, 4.3.1 and current 4_3 CVS.
The references between $_SESSION entries are never reestablished.
Additionally, I tried a cvs checkout -r PHP_4_3_0 -D 2/7/2003 with the
same negative result.
So, are you absolutely sure that you have some code where this works?
Did you use register_globals = on?
------------------------------------------------------------------------
[2003-02-17 07:19:16] goth at php-resource dot de
Hello,
probably a hint:
my php4-STABLE-200302071830 works fine ...
php430 does not ... so as php4-STABLE-200302162230
------------------------------------------------------------------------
[2003-02-16 21:29:16] goth at php-resource dot de
Hello,
I've got a Problem unserializing variables which are a reference. An to
me it seems to be a bug ... !
Example:
session_start();
$_SESSION["A"]=10;
$_SESSION["B"]=&$_SESSION["A"];
is correctly serialized to:
A|i:10;B|R:1;
I am happy ... ;)
But if I call this session again ... maybe the next page PHP seems to
loose the information that B was a reference.
Example:
session_start();
echo "BEFORE: A=".$_SESSION["A"]."<br />";
echo "BEFORE: B=".$_SESSION["B"]."<br />";
$_SESSION["A"]++;
echo "AFTER: A=".$_SESSION["A"]."<br />";
echo "AFTER: B=".$_SESSION["B"]."<br />";
It results to:
BEFORE: A=10
BEFORE: B=10
AFTER: A=11
AFTER: B=10
where I thought of A and B having the same value ... for B beeing a
reference to A ...
@sniper: Please don't answer ... your arrogant (and almost dumb)
answers cause me one heart-attack after the other ... !!!!!!
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=22245&edit=1