ID: 30151 Updated by: [EMAIL PROTECTED] Reported By: bugs dot php dot net at b-a-l-u dot de -Status: Open +Status: Closed Bug Type: Documentation problem Operating System: Linux (Debian Woody) PHP Version: Irrelevant New Comment:
Thank you for your bug report. This issue has already been fixed in the latest released version of PHP, which you can download at http://www.php.net/downloads.php Previous Comments: ------------------------------------------------------------------------ [2004-09-19 12:12:46] bugs dot php dot net at b-a-l-u dot de It seems to work as expected if I do the following to remove count from the session. $_SESSION = array(); session_unregister('count'); However - the PHP documentation tells me that "If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered() and session_unregister()." - so doing so is probably wrong. ------------------------------------------------------------------------ [2004-09-19 11:56:11] bugs dot php dot net at b-a-l-u dot de Description: ------------ In PHP 4.1.2 (Debian Woody) seems to be a problem with session_encode(); This problem was probably fixed already in later versions, as I receive correct results in PHP 5.0.1 (local wampp installation of the apachefriends package). However - a small note in the PHP documentation regarding this problem would have saved me a lot of debugging time. Especially if I was told at which version this was fixed, so I might raise the minimum PHP version requirements of my scripts or find a workaround somehow... Because of this I am filing it as a documentation problem. The problem is that session_encode() seems to encode old session information or perhaps does not use $_SESSION as a source for the data to be encoded. See the examples below for the effect. On both PHP versions register_globals is enabled. I am not sure if this is related to "If you enable register_globals, session_unregister() should be used since session variables are registered as global variables when session data is deserialized." (http://php.net/manual/en/ref.session.php) Reproduce code: --------------- <?php session_start(); print('<a href="A.php">load again</a><br />'); print(session_id().'<br />'); $_SESSION['count']++; var_dump($_SESSION); echo '<br />'; print(session_encode().'<br />'); /* delete this line to enable "resetting" of the array print('Resetting session array<br />'); $_SESSION = array(); var_dump($_SESSION); echo '<br />'; print(session_encode().'<br />'); /* */ ?> Expected result: ---------------- In PHP Version 5.0.1 the following happens (which looks ok) (added some notes starting with "//"): e23b68a2ae188a2ad69540f293435af1 array(1) { ["count"]=> int(1) } count|i:1; // session_encode() correctly starts with session data e23b68a2ae188a2ad69540f293435af1 array(1) { ["count"]=> &int(2) } count|i:2; Now I enable the "reset" of the session array: e23b68a2ae188a2ad69540f293435af1 array(1) { ["count"]=> &int(3) } count|i:3; Resetting session array array(0) { } // the session_encode call correctly returns "" e23b68a2ae188a2ad69540f293435af1 array(1) { ["count"]=> int(1) } count|i:1; Resetting session array array(0) { } Actual result: -------------- In PHP 4.1.2 I get the following output: (added some notes starting with "//") 97debb21091253568094c82ebdfd9ca0 array(1) { ["count"]=> int(1) } // no session_encode data? 97debb21091253568094c82ebdfd9ca0 array(1) { ["count"]=> &int(2) } count|i:2; Now I enable the "reset" of the session array: 97debb21091253568094c82ebdfd9ca0 array(1) { ["count"]=> &int(3) } count|i:3; Resetting session array array(0) { } // the $_SESSION array is empty, but count|i:3; // session_encode still maintains the old content? 97debb21091253568094c82ebdfd9ca0 array(1) { ["count"]=> &int(4) } count|i:4; Resetting session array array(0) { } count|i:4; ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=30151&edit=1