ID: 29032 Comment by: anthony at ectrolinux 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:
For reference, this bug appears to be synonymous to bug #30578, with the same cause but a different effect. Previous Comments: ------------------------------------------------------------------------ [2004-10-26 02:40:15] auroraeosrose at hotmail dot com 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. ------------------------------------------------------------------------ [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