#45706 [Opn]: Serializing of ArrayIterator extended Objects

From: Date: Mon, 04 Aug 2008 12:51:07 +0000
Subject: #45706 [Opn]: Serializing of ArrayIterator extended Objects
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-1054@lists.php.net to get a copy of this message
ID: 45706 Updated by: jani@php.net Reported By: bobka at bigfoot dot com Status: Open -Bug Type: Session related +Bug Type: Documentation problem Operating System: Linux PHP Version: 5.2.6 New Comment: The class has to be defined before session_start() call. Documentation for session seems to lack this little note.. Previous Comments: ------------------------------------------------------------------------ [2008-08-04 12:20:45] bobka at bigfoot dot com 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 ) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=45706&edit=1

« previous php.doc.bugs (#1054) next »