From 99bf26be0b81a08f2fef4f96f8983075c81eacae Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Mon, 16 Feb 2026 11:23:55 +0000 Subject: [PATCH] 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. --- UPGRADING.INTERNALS | 3 +++ ext/session/php_session.h | 1 + ext/session/session.c | 4 ++++ 3 files changed, 8 insertions(+) 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;