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