PHP :: Bug #22245 :: Unserialize Problem with References
| Bug #22245 | Unserialize Problem with References | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Submitted: | 2003-02-16 21:29 UTC | Modified: | 2003-08-11 14:40 UTC |
|
||||||
| From: | goth at php-resource dot de | Assigned: | sas (profile) | |||||||
| Status: | Closed | Package: | Session related | |||||||
| PHP Version: | 4.3.3RC2-dev, 5.0.0b2-dev | OS: | * | |||||||
| Private report: | No | CVE-ID: | None | |||||||
[2003-02-16 21:29 UTC] 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 ... !!!!!!
Patches
Pull Requests
History
AllCommentsChangesGit/SVN commits
[2003-02-17 07:19 UTC] goth at php-resource dot de
[2003-05-20 17:38 UTC] sas@php.net
[2003-05-20 17:53 UTC] goth at php-resource dot de
[2003-05-26 21:55 UTC] gschine at middlebury dot edu
[2003-07-12 23:34 UTC] sniper@php.net
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.[2003-08-11 14:21 UTC] iliaa@php.net
[2003-08-11 14:40 UTC] goth at php-resource dot de