ID: 21306
Updated by: [EMAIL PROTECTED]
Reported By: Xuefer at 21cn dot com
-Status: Open
+Status: Assigned
Bug Type: Session related
Operating System: linux
PHP Version: 4.3.7
-Assigned To:
+Assigned To: sas
Previous Comments:
------------------------------------------------------------------------
[2004-11-08 17:24:27] Xuefer at 21cn dot com
i guess i've found the bug
it's a "exception safe" problem as c++
well, not php5 exception, i meant zend_bailout(longjmp)
when write handler issue a Fatal error, will trigger zend_bailout() and
skip ALL other modules rshutdown, including the one right after
session_flush_data();
session.c:
static void php_session_flush(TSRMLS_D)
{
if(PS(session_status)==php_session_active) {
php_session_save_current_state(TSRMLS_C); <-- NOT exception
safe using for mod_user.c
}
PS(session_status)=php_session_none; <- WON'T executed when
zend_bailout
}
suggested fix:
mod_user.c :: function PS_WRITE_FUNC(user)
chnage
======
retval = ps_call_handler(PSF(write), 2, args TSRMLS_CC);
======
to
======
zend_try {
retval = ps_call_handler(PSF(write), 2, args TSRMLS_CC);
} zend_end_try();
======
------------------------------------------------------------------------
[2003-05-20 10:03:32] [EMAIL PROTECTED]
Code being executed twice really sounds like a problem in the scripting
engine to me. It could be caused or triggered by defects in the tool
chain (buggy compiler optimizer, broken bison/flex).
Please retest with current Stable snapshot from snaps.php.net.
------------------------------------------------------------------------
[2003-03-06 11:35:25] soletan at toxa dot de
Damn, I got rid of that message Xuefer initially posted. All I had done
was calling exit() before session could write back its data.
Then I included session_write_close() before some exit. It's not that
exit inside some session_set_save_handler-calling function. It's any
exit at any place, I expect.
Isn't it possible, to include this needed call to session_write_close()
automatically in sources of exit() to avoid all that trouble I have been
handling with for the last 24 hours??? It would be more convenient,
doesn't it?
BTW: I have PHP 4.3.1 as DSO to Apache 2.0.43 under SuSE Linux 7.1. The
first two are both self-compiled from source.
Best Regards,
Thomas Urban
------------------------------------------------------------------------
[2003-02-07 17:15:20] rob at nospamplease dot com
This appears (in our case anyway) to be triggered by the use of an
"exit" statement in the session_set_save_handler session_write
function. We had a benign error in our custom session_write function
(caused by the session data not changing when it was writing out)..
this caused an error message to be written to a log file, and then the
"exit;" statement. In PHP 4.2, this exit apparently caused no problems
but now it generates this seemingly unrelated error message.
Incidently, because this message is generated at the time of
session_write (rather than during actual content generation) it also
caused an interaction with ob_gzhandler (gzip compression) such that
blank pages were being served up.. we had to disable ob_gzhandler to
even see the "A session is active..." messages.. This seems buggy to
me.
------------------------------------------------------------------------
[2002-12-31 02:52:19] Xuefer at 21cn dot com
i forgot to note that, this issue is random happend
i can't reproduce it, but my user trigger it and i saw errors in log
and my script is in production, it's too complex
i am not able to give full script
but my function look like:
function mysessionstart() {
if (session_id()) return
session_set_save_handler(
'_sess_open',
'_sess_close',
'_sess_read',
'_sess_write',
'_sess_destroy',
'_sess_gc'
);
session_start();
}
it works fine until get warnning in php-4.3.0
here the config is:
session.save_handler = files
session.save_path = /tmp
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.serialize_handler = php
session.gc_probability = 1
session.gc_maxlifetime = 1440
containing ids.
session.referer_check =
session.entropy_length = 0
session.entropy_file =
;session.entropy_length = 16
;session.entropy_file = /dev/urandom
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 1
url_rewriter.tags =
"a=href,area=href,frame=src,input=src,form=fakeentry"
------------------------------------------------------------------------
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
http://bugs.php.net/21306
--
Edit this bug report at http://bugs.php.net/?id=21306&edit=1