Doc #73343 [Com]: extra call to read in session_regenerate_id in custom session handler

From: Date: Tue, 25 Oct 2016 20:03:58 +0000
Subject: Doc #73343 [Com]: extra call to read in session_regenerate_id in custom session handler
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-14043@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=73343&edit=1 ID: 73343 Comment by: ryan dot brothers at gmail dot com Reported by: ryan dot brothers at gmail dot com Summary: extra call to read in session_regenerate_id in custom session handler Status: Not a bug Type: Documentation Problem Package: Session related Operating System: Linux PHP Version: 7.1.0RC3 Assigned To: yohgaki Block user comment: N Private report: N New Comment: Thanks, I updated my session handler to handle this. I was just more curious why read was being called with the output being completely ignored. Yes, the second read() should not return anything, but if it does return something, it looks like it is being ignored anyway. Previous Comments: ------------------------------------------------------------------------ [2016-10-25 19:14:48] yohgaki@php.net BTW, the second read() is mandatory because new session data must be locked. The second read() should not return anything because it must be new session. It's called just to lock new session. If you have problem with this, you have something wrong in your save handler. i.e. It's basically the same as session_start(); session_commit(); $old = $_SESSION; session_id($newid); session_start(); $_SESSIOND = $old; It does more things internally to keep reference to $_SESSION, but this is the basic picture. ------------------------------------------------------------------------ [2016-10-25 18:59:21] yohgaki@php.net Oops. This change was made in PHP 7.0 and documented already. ------------------------------------------------------------------------ [2016-10-25 18:28:51] yohgaki@php.net As a result of a bug fix, session_regenerate_id() save old session and start new session from 7.1 I've added UPGRADING. ------------------------------------------------------------------------ [2016-10-25 17:05:24] cmb@php.net This behavioral change has been introduced by fixing bug #61470. Is the additional read desired or necessary, Yasuo? If so, this should probably be documented. ------------------------------------------------------------------------ [2016-10-18 23:51:52] ryan dot brothers at gmail dot com Description: ------------ When using a custom session handler in PHP 7 or 7.1, when session_regenerate_id() is called, the read function is called on the new session_id. This does not occur in PHP 5.6. This extra call to read is causing an issue in my custom session handler. From my testing, it appears to ignore the result of the read call anyway as in the below, abc remains 1. Is there a reason for this extra call to read? Thanks for your help. Test script: --------------- <?php class test_session_handler implements SessionHandlerInterface { public function open($save_path, $session_name) { return true; } public function close() { return true; } public function read($id) { if ($GLOBALS['in_session_regenerate_id'] == true) { echo 'read in session_regenerate_id<br>'; return 'abc|i:2;'; } else { echo 'read<br>'; return 'abc|i:1;'; } } public function write($session_id, $session_data) { return true; } public function destroy($session_id) { return true; } public function gc($maxlifetime) { return true; } } ob_start(); $GLOBALS['in_session_regenerate_id'] = false; session_set_save_handler(new test_session_handler()); session_start(); echo 'start session_regenerate_id<br>'; $GLOBALS['in_session_regenerate_id'] = true; session_regenerate_id(true); echo 'end session_regenerate_id<br>'; echo $_SESSION['abc']; Expected result: ---------------- read start session_regenerate_id end session_regenerate_id 1 Actual result: -------------- read start session_regenerate_id read in session_regenerate_id end session_regenerate_id 1 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=73343&edit=1

« previous php.doc.bugs (#14043) next »