|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2008-08-04 12:51 UTC] jani@php.net
[2008-08-06 08:38 UTC] bobka at bigfoot dot com
[2008-08-06 08:45 UTC] bobka at bigfoot dot com
[2008-08-06 16:46 UTC] jani@php.net
[2008-08-06 16:51 UTC] bobka at bigfoot dot com
[2008-08-29 15:01 UTC] dmitry@php.net
[2008-08-31 23:13 UTC] colder@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Oct 30 22:00:01 2025 UTC |
Description: ------------ This is a very special case. If an object of class that extends ArrayIterator is saved in session data and the class definition is not available in a later call, then the session data gets corrupted. Call the example code three times to see the bug. Reproduce code: --------------- <?php // start session session_start(); // display session data echo "<pre>".print_r($_SESSION,true)."</pre><br>"; // already initialized? if (!isset($_SESSION['first'])) { // bug occures only if the class is not defined later // and only if it extends ArrayIterator class my_array extends ArrayIterator { } $_SESSION['first'] = "The first entry is ok"; $t = new my_array(); // at least one member needed $t[] = "this gets lost"; $_SESSION['killer'] = $t; $_SESSION['this_is_going_to_be_messed_up'] = "The value of the entry is ok"; $_SESSION['last'] = "The last entry is ok"; } Expected result: ---------------- At first call: Array ( ) At second call: Array ( [first] => The first entry is ok [killer] => __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => my_array [0] => this gets lost ) [this_is_going_to_be_messed_up] => The value of the entry is ok [last] => The last entry is ok ) At third call Array ( [first] => The first entry is ok [killer] => __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => my_array [0] => this gets lost ) [this_is_going_to_be_messed_up] => The value of the entry is ok [last] => The last entry is ok ) Actual result: -------------- At third call: Notice: session_start() [function.session-start]: Unexpected end of serialized data in test.php on line 3 Array ( [first] => The first entry is ok [killer] => [}this_is_going_to_be_messed_up] => The value of the entry is ok [last] => The last entry is ok )