Bug #75047 [Com]: session_regenerate_id fails with redis
Edit report at https://bugs.php.net/bug.php?id=75047&edit=1
ID: 75047
Comment by: ray at rayxis dot com
Reported by: bartosz at kibilko dot pl
Summary: session_regenerate_id fails with redis
Status: Open
Type: Bug
Package: Unknown/Other Function
Operating System: Ubuntu / Docker Container
PHP Version: 7.0.22
Block user comment: N
Private report: N
New Comment:
I'm also experiencing this in php 7.1.8.
The reason that this problem exists is because PHP doesn't create the key in Redis if it
doesn't exist. As a work-around, you need to create a key if one doesn't exist in the
read() function of your session handler class. This removed the problem from my error logs:
public function read ($key)
{
// Get the session data and extend the expiration.
$nkey = $this->prefix . $key;
read:
$data = $this->sess->get($nkey);
// If nothing exists, create it first because PHP has a bug. :(
if (!$data)
{
$this->write($key,TRUE);
goto read;
}
$this->sess->expire($key, getenv('SESSTTL'));
// Return the result.
return $data;
}
Previous Comments:
------------------------------------------------------------------------
[2017-08-08 10:05:26] bartosz at kibilko dot pl
Description:
------------
PHP 7.0.21
phpredis 3.1.2
redis 3.0.7 / 3.2.4
Magento 1.14.2.4
Context:
There are some problems with session_regenerate_id function when redis is used as session adapter.
Currently, I'm trying to login in Magento and session_id is stored in redis and in cookies but
nothing happens - user is not logged in. When I remove the cookie, PHP throws this:
Recoverable Error: session_regenerate_id(): Failed to create(read) session ID: redis (path:
tcp://redis:6379/?database=2).
It can be also related to phpredis, because version 3.1.3 has another bug :) - https://github.com/phpredis/phpredis/issues/1211
Expected result:
----------------
No errors, user logged in
Actual result:
--------------
Recoverable Error: session_regenerate_id(): Failed to create(read) session ID: redis (path:
tcp://redis:6379/?database=2) in
/var/www/mage/magento/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php on line 141
#0 [internal function]: mageCoreErrorHandler(4096, 'session_regener...',
'/var/www/magent...', 141, Array)
#1 /var/www/mage/magento/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php(141):
session_regenerate_id(false)
#2 /var/www/mage/magento/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php(222):
Mage_Core_Model_Session_Abstract_Varien->start('frontend')
#3 /var/www/mage/magento/app/code/core/Mage/Core/Model/Session/Abstract.php(84):
Mage_Core_Model_Session_Abstract_Varien->init('core', 'frontend')
#4 /var/www/mage/magento/app/code/core/Mage/Core/Model/Session.php(42):
Mage_Core_Model_Session_Abstract->init('core', 'frontend')
#5 /var/www/mage/magento/app/code/core/Mage/Core/Model/Config.php(1354):
Mage_Core_Model_Session->__construct(Array)
#6 /var/www/mage/magento/app/Mage.php(471):
Mage_Core_Model_Config->getModelInstance('core/session', Array)
#7 .........
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=75047&edit=1
Thread (6 messages)