ID: 29032
Comment by: auroraeosrose at hotmail dot com
Reported By: antonr at game dot permonline dot ru
Status: Open
Bug Type: Session related
Operating System: Irrelevant
PHP Version: 5CVS-2004-07-06 (dev)
New Comment:
Modifying $_SESSION in the destructor ONLY works if you call
unset($object) before the end of your script, however this is a pain in
the rear - and if you have references to that object elsewhere it
doesn't work properly.
There is a workaround... You CAN use register_shutdown_function in the
constructor of your class
public function __construct()
{
register_shutdown_function(array($this, '__destruct');
}
and then the destruct is called early enough that you can modify
$_SESSION. But this defeats the whole purpose of a destructor - I could
do that in every class if php5 didn't support destructors (in fact I did
in php4) but I thought the point was to eliminate messy workarounds.
Now why in the world the sessions are closed in between when shutdown
functions and destructors are called is beyond me.
Previous Comments:
------------------------------------------------------------------------
[2004-07-06 16:58:15] antonr at game dot permonline dot ru
Description:
------------
Session are closed before all object destructors executed. It seems to
be wrong, cause objects desctructors may save information in opened
session.
Reproduce code:
---------------
<?php
class MySession
{ public $number;
public function __construct()
{ session_start();
$this->number = @$_SESSION["number"];
}
public function Process()
{ $this->number++;
}
public function __destruct()
{ $_SESSION["number"] = $this->number;
session_write_close();
}
}
$ss = new MySession();
$ss->Process();
echo $ss->number;
?>
Expected result:
----------------
With every page reloading number in the page must increase by 1.
Actual result:
--------------
Everytime number is equal 1.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=29032&edit=1