{"record":{"id":"bc9a09573fa52f8a","repo":"ratchetphp/Ratchet","slug":"unable-to-parse-session-serialize-handler","errorCode":null,"errorMessage":"Unable to parse session serialize handler","messagePattern":"Unable to parse session serialize handler","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"src/Ratchet/Session/SessionProvider.php","lineNumber":64,"sourceCode":"     */\n    public function __construct(HttpServerInterface $app, \\SessionHandlerInterface $handler, array $options = array(), $serializer = null) {\n        if ($serializer !== null && !$serializer instanceof HandlerInterface) { // manual type check to support legacy PHP < 7.1\n            throw new \\InvalidArgumentException('Argument #4 ($serializer) expected null|Ratchet\\Session\\Serialize\\HandlerInterface');\n        }\n        $this->_app     = $app;\n        $this->_handler = $handler;\n        $this->_null    = new NullSessionHandler;\n\n        ini_set('session.auto_start', 0);\n        ini_set('session.cache_limiter', '');\n        ini_set('session.use_cookies', 0);\n\n        $this->setOptions($options);\n\n        if (null === $serializer) {\n            $serialClass = __NAMESPACE__ . \"\\\\Serialize\\\\{$this->toClassCase(ini_get('session.serialize_handler'))}Handler\"; // awesome/terrible hack, eh?\n            if (!class_exists($serialClass)) {\n                throw new \\RuntimeException('Unable to parse session serialize handler');\n            }\n\n            $serializer = new $serialClass;\n        }\n\n        $this->_serializer = $serializer;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    #[HackSupportForPHP8] public function onOpen(ConnectionInterface $conn, ?RequestInterface $request = null) { /*\n    public function onOpen(ConnectionInterface $conn, RequestInterface $request = null) { /**/\n        $sessionName = ini_get('session.name');\n\n        $id = array_reduce($request->getHeader('Cookie'), function($accumulator, $cookie) use ($sessionName) {\n            if ($accumulator) {\n                return $accumulator;","sourceCodeStart":46,"sourceCodeEnd":82,"githubUrl":"https://github.com/ratchetphp/Ratchet/blob/e621c6c40bf684bbbb877102416ad5303d05a9cc/src/Ratchet/Session/SessionProvider.php#L46-L82","documentation":"When no $serializer is supplied, SessionProvider tries to infer one from the PHP ini setting session.serialize_handler (e.g. 'php', 'php_serialize', 'wddx') by dynamically instantiating Ratchet\\Session\\Serialize\\{ClassCase}Handler. If no class matching that name exists, the constructor throws RuntimeException, because it cannot safely serialize/unserialize sessions.","triggerScenarios":"Constructing SessionProvider without a $serializer while php.ini's session.serialize_handler is set to a value Ratchet has no handler class for (e.g. 'wddx', 'php_binary', or a custom name), or the ini value is empty/unexpected at runtime.","commonSituations":"Servers with php.ini configured to an exotic serialize handler; hosting environments overriding session.serialize_handler; PHP builds where the wddx extension's handler was relied on but Ratchet has no WddxHandler; CLI vs web SAPI ini differences.","solutions":["Set session.serialize_handler = php_serialize (or 'php') in php.ini before constructing SessionProvider.","Explicitly pass a serializer: new SessionProvider($app, $handler, [], new \\Ratchet\\Session\\Serialize\\PhpSerializeHandler).","Call ini_set('session.serialize_handler', 'php') at app bootstrap so ini_get returns a supported value.","Verify with ini_get('session.serialize_handler') which handler the runtime is using and confirm a matching Ratchet\\Session\\Serialize\\*Handler class exists."],"exampleFix":"// before\n$provider = new SessionProvider($app, $handler); // ini says 'wddx' -> RuntimeException\n// after\n$provider = new SessionProvider($app, $handler, [], new \\Ratchet\\Session\\Serialize\\PhpSerializeHandler);","handlingStrategy":"validation","validationCode":"$handler = ini_get('session.serialize_handler');\n$allowed = ['php', 'php_serialize'];\nif (!in_array($handler, $allowed, true)) {\n    ini_set('session.serialize_handler', 'php');\n}\n$provider = new SessionProvider($app, $handler);","typeGuard":null,"tryCatchPattern":"try {\n    $provider = new SessionProvider($app, $handler);\n} catch (\\RuntimeException $e) {\n    ini_set('session.serialize_handler', 'php');\n    $provider = new SessionProvider($app, $sessionHandler);\n}","preventionTips":["Pin session.serialize_handler to 'php' or 'php_serialize' in php.ini and deployment config.","Pass an explicit serializer instance to avoid ini dependence entirely.","Check ini_get('session.serialize_handler') during health checks/startup.","Avoid wddx/php_binary handlers with Ratchet; they have no matching Serialize handler class."],"tags":["php","session","configuration","runtime"],"backgroundTag":"invalid-config-value","analyzedSha":"e621c6c40bf684bbbb877102416ad5303d05a9cc","analyzedAt":"2026-09-16T00:13:27.878Z","contentChangedAt":"2026-09-16T00:13:27.878Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}