Skip to content

STREAM_CLIENT_PERSISTENT does not work in conjunction with useSsl => true #267

@particleflux

Description

@particleflux

Custom socketClientFlags with the STREAM_CLIENT_PERSISTENT flag set will not work with useSsl => true, due to attempting to re-enable encryption when it is already active.

Could probably check for the persistent flag in the bitmask and skip the SSL init conditionally.
Not that simple, as it could be an already open connection or a fresh one.

What steps will reproduce the problem?

Have a redis connection configured with:

'hostname' => '<your-redis-host>',
'port'     => '6379/sessions',
'database' => 2,
'useSSL'   => true,
'socketClientFlags' => STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT,

and do multiple requests.

What's expected?

Connection is reused successfully.

What do you get instead?

PHP Warning – [yii\base\ErrorException] stream_socket_enable_crypto(): SSL/TLS already set-up for this stream in
/var/www/app/vendor/yiisoft/yii2-redis/src/Connection.php:646

Stack trace:
#0 [internal function]: yii\base\ErrorHandler->handleError()
#1 /var/www/app/vendor/yiisoft/yii2-redis/src/Connection.php(646): stream_socket_enable_crypto()
#2 /var/www/app/vendor/yiisoft/yii2-redis/src/Connection.php(759): yii\redis\Connection->open()
#3 /var/www/app/vendor/yiisoft/yii2-redis/src/Session.php(128): yii\redis\Connection->executeCommand()
#4 [internal function]: yii\redis\Session->readSession()
#5 /var/www/app/vendor/yiisoft/yii2/web/Session.php(149): session_start()
#6 /var/www/app/vendor/yiisoft/yii2/web/Session.php(699): yii\web\Session->open()
#7 /var/www/app/vendor/yiisoft/yii2/web/User.php(691): yii\web\Session->get()
#8 /var/www/app/vendor/yiisoft/yii2/web/User.php(199): yii\web\User->renewAuthStatus()
#9 /var/www/app/vendor/yiisoft/yii2/web/User.php(367): yii\web\User->getIdentity()
#10 /var/www/app/vendor/yiisoft/yii2/base/Component.php(139): yii\web\User->getIsGuest()
#11 /var/www/app/vendor/yiisoft/yii2-debug/src/panels/UserPanel.php(83): yii\base\Component->__get()
#12 /var/www/app/vendor/yiisoft/yii2/base/BaseObject.php(109): yii\debug\panels\UserPanel->init()
#13 [internal function]: yii\base\BaseObject->__construct()
#14 /var/www/app/vendor/yiisoft/yii2/di/Container.php(419): ReflectionClass->newInstanceArgs()
#15 /var/www/app/vendor/yiisoft/yii2/di/Container.php(170): yii\di\Container->build()
#16 /var/www/app/vendor/yiisoft/yii2/BaseYii.php(365): yii\di\Container->get()
#17 /var/www/app/vendor/yiisoft/yii2-debug/src/Module.php(253): yii\BaseYii::createObject()
#18 /var/www/app/vendor/yiisoft/yii2-debug/src/Module.php(225): yii\debug\Module->initPanels()
#19 /var/www/app/vendor/yiisoft/yii2/base/BaseObject.php(109): yii\debug\Module->init()
#20 /var/www/app/vendor/yiisoft/yii2/base/Module.php(161): yii\base\BaseObject->__construct()
#21 [internal function]: yii\base\Module->__construct()
#22 /var/www/app/vendor/yiisoft/yii2/di/Container.php(419): ReflectionClass->newInstanceArgs()
#23 /var/www/app/vendor/yiisoft/yii2/di/Container.php(170): yii\di\Container->build()
#24 /var/www/app/vendor/yiisoft/yii2/BaseYii.php(365): yii\di\Container->get()
#25 /var/www/app/vendor/yiisoft/yii2/base/Module.php(445): yii\BaseYii::createObject()
#26 /var/www/app/vendor/yiisoft/yii2/base/Application.php(313): yii\base\Module->getModule()
#27 /var/www/app/vendor/yiisoft/yii2/web/Application.php(69): yii\base\Application->bootstrap()
#28 /var/www/app/vendor/yiisoft/yii2/base/Application.php(271): yii\web\Application->bootstrap()
#29 /var/www/app/vendor/yiisoft/yii2/base/BaseObject.php(109): yii\base\Application->init()
#30 /var/www/app/vendor/yiisoft/yii2/base/Application.php(204): yii\base\BaseObject->__construct()
#31 /var/www/app/frontend/web/index.php(18): yii\base\Application->__construct()

Additional info

Q A
Yii version 2.0.49.4
PHP version 8.2.21
Operating system Linux / Debian

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions