diff options
Diffstat (limited to 'ext/session/session.c')
-rw-r--r-- | ext/session/session.c | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/ext/session/session.c b/ext/session/session.c index 0277884964..a79569c5ea 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -1952,12 +1952,23 @@ static int save_handler_check_session() { return SUCCESS; } +static inline void set_user_save_handler_ini(void) { + zend_string *ini_name, *ini_val; + + ini_name = zend_string_init("session.save_handler", sizeof("session.save_handler") - 1, 0); + ini_val = zend_string_init("user", sizeof("user") - 1, 0); + PS(set_handler) = 1; + zend_alter_ini_entry(ini_name, ini_val, PHP_INI_USER, PHP_INI_STAGE_RUNTIME); + PS(set_handler) = 0; + zend_string_release_ex(ini_val, 0); + zend_string_release_ex(ini_name, 0); +} + /* {{{ Sets user-level functions */ PHP_FUNCTION(session_set_save_handler) { zval *args = NULL; int i, num_args, argc = ZEND_NUM_ARGS(); - zend_string *ini_name, *ini_val; if (argc > 0 && argc <= 2) { zval *obj = NULL; @@ -2052,13 +2063,7 @@ PHP_FUNCTION(session_set_save_handler) } if (PS(session_status) != php_session_active && (!PS(mod) || PS(mod) != &ps_mod_user)) { - ini_name = zend_string_init("session.save_handler", sizeof("session.save_handler") - 1, 0); - ini_val = zend_string_init("user", sizeof("user") - 1, 0); - PS(set_handler) = 1; - zend_alter_ini_entry(ini_name, ini_val, PHP_INI_USER, PHP_INI_STAGE_RUNTIME); - PS(set_handler) = 0; - zend_string_release_ex(ini_val, 0); - zend_string_release_ex(ini_name, 0); + set_user_save_handler_ini(); } RETURN_TRUE; @@ -2090,14 +2095,8 @@ PHP_FUNCTION(session_set_save_handler) /* remove shutdown function */ remove_user_shutdown_function("session_shutdown", sizeof("session_shutdown") - 1); - if (PS(mod) && PS(mod) != &ps_mod_user) { - ini_name = zend_string_init("session.save_handler", sizeof("session.save_handler") - 1, 0); - ini_val = zend_string_init("user", sizeof("user") - 1, 0); - PS(set_handler) = 1; - zend_alter_ini_entry(ini_name, ini_val, PHP_INI_USER, PHP_INI_STAGE_RUNTIME); - PS(set_handler) = 0; - zend_string_release_ex(ini_val, 0); - zend_string_release_ex(ini_name, 0); + if (!PS(mod) || PS(mod) != &ps_mod_user) { + set_user_save_handler_ini(); } for (i = 0; i < argc; i++) { |