Edit report at https://bugs.php.net/bug.php?id=36696&edit=1
ID: 36696
Updated by: yohgaki@php.net
Reported by: iain at iaindooley dot com
Summary: __destruct() is called before serialize() when
object stored in session
Status: Assigned
Type: Feature/Change Request
-Package: Session related
+Package: Scripting Engine problem
Operating System: *
-PHP Version: 5.1.2
+PHP Version: *
Assigned To: sas
Block user comment: N
Private report: N
New Comment:
There is exact dup bug report, but I cannot find.
Workaround is call before session_write_close() before shutdown, but __destruct
should be the last magicmethod to be called, isn't it?
Previous Comments:
------------------------------------------------------------------------
[2008-06-26 09:38:09] margus dot sipria at gmail dot com
duplicate with a bug http://bugs.php.net/bug.php?id=33772
------------------------------------------------------------------------
[2006-03-23 00:27:58] iain at iaindooley dot com
in a garbage collection system, the destructor shouldn't be called on an object until the last
reference to it is destroyed. if i do:
$_SESSION['var'] = new Var();
then a reference to that object that was created should be stored in the $_SESSION array, and
__destruct() should not be called until the $_SESSION array is destoryed. so clearly the session
array must be being destroyed before the objects within it are serialized, which isn't right.
------------------------------------------------------------------------
[2006-03-22 18:13:41] iliaa@php.net
There is nothing wrong with the order here. Temp var gets destroyed as soon as it is created, while
session serialization happens at the end of the script.
------------------------------------------------------------------------
[2006-03-21 23:34:59] iain at iaindooley dot com
i would say that the fact the order of operations changes for a temp var or an assigned var is a
bug.
------------------------------------------------------------------------
[2006-03-21 15:47:16] iliaa@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
When putting objects into session or serializing them manually put the instantiation result into a
variable 1st and then use it.
Ex. $a = new Object();
$_SESSION['obj'] = $a;
Doing so avoids temp var, which gets destroyed right away hence leading to the wrong order of
operations.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=36696--
Edit this bug report at https://bugs.php.net/bug.php?id=36696&edit=1