Commit 99bf26be0b8 for php.net

commit 99bf26be0b81a08f2fef4f96f8983075c81eacae
Author: Gina Peter Banyard <girgias@php.net>
Date:   Mon Feb 16 11:23:55 2026 +0000

    ext/session: add mod_user_uses_object_methods_as_handlers global

    This solves the use case of knowing if the session handlers are methods of an object or individual handlers without relying on the now removed mod_user_names global.

diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS
index 0c8e10e17f0..fc672ac54a8 100644
--- a/UPGRADING.INTERNALS
+++ b/UPGRADING.INTERNALS
@@ -106,6 +106,9 @@ PHP 8.6 INTERNALS UPGRADE NOTES

 - ext/session:
   . php_session_flush() now returns a bool rather than a zend_result.
+  . The mod_user_names global has been removed.
+  . The mod_user_uses_object_methods_as_handlers global has been added,
+    it indicates whether the session handlers are methods of an object or not.
   . Removed session_adapt_url().
   . PS_OPEN_ARGS is now defined as
     `void **mod_data, zend_string *save_path, zend_string *session_name`
diff --git a/ext/session/php_session.h b/ext/session/php_session.h
index 7f93c5cec59..b7ed88a8f6c 100644
--- a/ext/session/php_session.h
+++ b/ext/session/php_session.h
@@ -184,6 +184,7 @@ typedef struct _php_ps_globals {

 	bool mod_user_implemented;
 	bool mod_user_is_open;
+	bool mod_user_uses_object_methods_as_handlers;
 	bool use_trans_sid; /* contains the INI value of whether to use trans-sid */
 } php_ps_globals;

diff --git a/ext/session/session.c b/ext/session/session.c
index 5a05700608c..02977d8d611 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -118,6 +118,7 @@ static inline void php_rinit_session_globals(void)
 	PS(set_handler) = false;
 	PS(mod_data) = NULL;
 	PS(mod_user_is_open) = false;
+	PS(mod_user_uses_object_methods_as_handlers) = false;
 	PS(define_sid) = true;
 	PS(session_vars) = NULL;
 	PS(module_number) = my_module_number;
@@ -2123,6 +2124,7 @@ PHP_FUNCTION(session_set_save_handler)
 		zend_string_release_ex(validate_sid_name, false);
 		zend_string_release_ex(update_timestamp_name, false);

+		PS(mod_user_uses_object_methods_as_handlers) = true;
 		if (register_shutdown) {
 			/* create shutdown function */
 			php_shutdown_function_entry shutdown_function_entry = {
@@ -2214,6 +2216,7 @@ PHP_FUNCTION(session_set_save_handler)
 	SESSION_SET_USER_HANDLER_PROCEDURAL_OPTIONAL(ps_validate_sid, validate_id_fci);
 	SESSION_SET_USER_HANDLER_PROCEDURAL_OPTIONAL(ps_update_timestamp, update_timestamp_fci);

+	PS(mod_user_uses_object_methods_as_handlers) = false;
 	RETURN_TRUE;
 }

@@ -2843,6 +2846,7 @@ static PHP_GINIT_FUNCTION(ps)
 	ps_globals->default_mod = NULL;
 	ps_globals->mod_user_implemented = false;
 	ps_globals->mod_user_is_open = false;
+	ps_globals->mod_user_uses_object_methods_as_handlers = false;
 	ps_globals->session_vars = NULL;
 	ps_globals->set_handler = false;
 	ps_globals->session_started_filename = NULL;