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

Reply via email to