Bug #73343 [Opn->Ver]: extra call to read in session_regenerate_id in custom session handler

From: Date: Tue, 25 Oct 2016 17:05:27 +0000
Subject: Bug #73343 [Opn->Ver]: extra call to read in session_regenerate_id in custom session handler
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-205004@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 Updated by: cmb@php.net Reported by: ryan dot brothers at gmail dot com Summary: extra call to read in session_regenerate_id in custom session handler -Status: Open +Status: Verified Type: Bug Package: Session related Operating System: Linux PHP Version: 7.1.0RC3 -Assigned To: +Assigned To: yohgaki Block user comment: N Private report: N New Comment: 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. Previous Comments: ------------------------------------------------------------------------ [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.bugs (#205004) next »