diff options
author | Zeev Suraski <zeev@php.net> | 2002-08-15 21:44:44 +0000 |
---|---|---|
committer | Zeev Suraski <zeev@php.net> | 2002-08-15 21:44:44 +0000 |
commit | 900651b7ab9e4ecb0030cd30a1dce631feedc18f (patch) | |
tree | 018d84e079129003ec9ed347a1f6f59ef8ee12f0 | |
parent | cc287d4c21d979ae0fa71f885eb788424e22cbc5 (diff) | |
download | php-git-900651b7ab9e4ecb0030cd30a1dce631feedc18f.tar.gz |
Make unset($_SESSION['foo']) actually remove the variable from the session,
if register_globals is off.
-rw-r--r-- | ext/session/php_session.h | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/ext/session/php_session.h b/ext/session/php_session.h index 01d8fc4d6d..022f8df342 100644 --- a/ext/session/php_session.h +++ b/ext/session/php_session.h @@ -186,8 +186,14 @@ PHPAPI int php_session_register_serializer(const char *name, PHPAPI void php_session_set_id(char *id TSRMLS_DC); PHPAPI void php_session_start(TSRMLS_D); -#define PS_ADD_VARL(name,namelen) \ - zend_hash_add_empty_element(&PS(vars), name, namelen + 1) +#define PS_ADD_VARL(name,namelen) \ + zend_hash_add_empty_element(&PS(vars), name, namelen + 1); \ + if (PS(http_session_vars)) { \ + zval *empty_var; \ + \ + ALLOC_INIT_ZVAL(empty_var); \ + zend_hash_add(Z_ARRVAL_P(PS(http_session_vars)), name, namelen+1, &empty_var, sizeof(zval *), NULL); \ + } #define PS_ADD_VAR(name) PS_ADD_VARL(name, strlen(name)) @@ -205,13 +211,17 @@ PHPAPI void php_session_start(TSRMLS_D); zval **struc; #define PS_ENCODE_LOOP(code) \ - for (zend_hash_internal_pointer_reset(&PS(vars)); \ - zend_hash_get_current_key_ex(&PS(vars), &key, &key_length, &num_key, 0, NULL) == HASH_KEY_IS_STRING; \ - zend_hash_move_forward(&PS(vars))) { \ - key_length--; \ - if (php_get_session_var(key, key_length, &struc TSRMLS_CC) == SUCCESS) { \ - code; \ - } \ + { \ + HashTable *_ht = (PS(http_session_vars) ? Z_ARRVAL_P(PS(http_session_vars)) : &PS(vars)); \ + \ + for (zend_hash_internal_pointer_reset(_ht); \ + zend_hash_get_current_key_ex(_ht, &key, &key_length, &num_key, 0, NULL) == HASH_KEY_IS_STRING; \ + zend_hash_move_forward(_ht)) { \ + key_length--; \ + if (php_get_session_var(key, key_length, &struc TSRMLS_CC) == SUCCESS) { \ + code; \ + } \ + } \ } ZEND_EXTERN_MODULE_GLOBALS(ps); |