|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2018-12-30 23:31 UTC] info at dreamtimeshop dot com
Description:
------------
In the PHP 7.2 and 7.3, there is not possible to set "user" as Session Save Handler.
1) unable to set it in php.ini:
The php.ini file includes line "session.save_handler = user".
phpinfo() says: "Registered save handlers: files user"
but below always shows "files" as current handler.
2) unable to change it in the scripts:
None ot those two pssibilities work:
session_module_name('user');
ini_set('session.save_handler', 'user');
Both of them throw a "Recoverable fatal error" which says "Cannot set 'user' save handler by ini_set() or session_module_name()"...
Tested on CentOS and Windows 10 with PHP 7.2.13 and PHP 7.3.0.
Older versions incl. PHP 7.1.15 are working as expected.
Test script:
---------------
<?php
session_module_name('user');
ini_set('session.save_handler', 'user');
?>
Expected result:
----------------
(nothing)
Actual result:
--------------
Recoverable fatal error: session_module_name(): Cannot set 'user' save handler by ini_set() or session_module_name() in ...
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Nov 01 00:00:01 2025 UTC |
Hello and thank you. Surprisingly, you are right! My complete code was as follows: public static function _init() { session_module_name('user'); session_set_save_handler( array('ADODB_Session', 'sess_open'), array('ADODB_Session', 'sess_close'), array('ADODB_Session', 'sess_read'), array('ADODB_Session', 'sess_write'), array('ADODB_Session', 'sess_destroy'), array('ADODB_Session', 'sess_gc') ); register_shutdown_function('session_write_close'); } It worked fine in all PHP versions, except when trying to upgrade to 7.2 or 7.3. After your comment, I commented out the line "session_module_name('user');", and it works indeed! Surely it makes no sense to call session_module_name exclusively without doing anything further. Until now, this was always done just before calling "session_set_save_handler". The current PHP documentation even indirectly mentions this as a prerequisite for using the database for sessions. Quote: session_set_save_handler() sets the user-level session storage functions which are used for storing and retrieving data associated with a session. This is most useful when a storage method other than those supplied by PHP sessions is preferred, e.g. storing the session data in a local database. ( http://php.net/manual/en/function.session-set-save-handler.php ) According to this doc page, nothing has changed since version 7.0. If it is not a bug, then this is a clear error in the documentation! Because in versions 7.2 and 7.3 "session_module_name" must not be used if you want to save sessions in the database.