|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2005-09-18 15:34 UTC] marcus dot uy at virtualthinking dot com
Description:
------------
hi,
I have read through some earlier bug posts regarding similar-ish in later versions of php4 and early versions of php5.
I want to report that this bug persists in version 5.0.4, 5.0.5, as well as 5.1.0rc1 too.
Setting "register_long_arrays=off" causes $_SESSION to break, but in a very unusual way.
For some reason putting 4 or 5 small items in the sessions array is fine (which is why most tests can pass), but putting more data or more items in the sessions array prevents the data from being written to the session file. You get a zero-length file and the session fails.
There is no error that faults or reports from this.
I haven't really measured the "breaking point", but it is real and I can consistently reproduce it on my system (the code is way too long to post here).
I note that php.ini doesn't seem to indicate the default status of this setting, but if "off" is the default value then this bug does not seem to affect linux versions of php.
Turning "on" register_long_arrays in php.ini restores full functionality. I suppose then, that this would be the near term work around.
Reproduce code:
---------------
page1.php
<?php
session_start ();
$_SESSION['login'] = "marcus.uy";
$_SESSION['password'] = "blahblahblah";
$_SESSION['memory'] = "abcdefghijklmnopqrstuvwxyz";
$_SESSION['userid'] = 1;
$_SESSION['userlevel'] = 10;
$_SESSION['usergroup'] = -1;
$_SESSION['accesslevel'] = 10;
$_SESSION['accessgroup'] = -1;
$_SESSION['auth'] = "NATIVE";
$_SESSION['auth_ip'] = "127.0.0.1";
echo ("<a href=\"/page2.php?".SID."\">Test Session</a>");
?>
page2.php?sid=1234567890abcdef
<?php
session_start ();
print_r ($_SESSION);
?>
Expected result:
----------------
Array
(
['login'] = "marcus.uy";
['password'] = "blahblahblah";
['memory'] = "abcdefghijklmnopqrstuvwxyz";
['userid'] = 1;
['userlevel'] = 10;
['usergroup'] = -1;
['accesslevel'] = 10;
['accessgroup'] = -1;
['auth'] = "NATIVE";
['auth_ip'] = "127.0.0.1";
)
Actual result:
--------------
Array
(
)
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 09:00:01 2025 UTC |
Hi, I have resolved this issue. It's not that the long arrays that is broken, but that $_SESSION has some unexpected behaviours. It turns out that $_SESSION is NOT really a normal array. If you assign a bunch of values to $_SESSION as an array, e.g.: $_SESSION = array ("value1", "value2", "value3"); It destroy's the "magic" of $_SESSION and session becomes a standard array (that vanishes on script exit), thus it does not save settings as expected. There have been some similar complaints in other bug reports. The discussion breaks down into two camps: 1. This is a feature, so don't allocate the array 2. This fails the test of "least surprise", behaviour should be "corrected" Ah well, it works now, and I know why, so that's what matters.