summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>2002-08-15 21:44:44 +0000
committerZeev Suraski <zeev@php.net>2002-08-15 21:44:44 +0000
commit900651b7ab9e4ecb0030cd30a1dce631feedc18f (patch)
tree018d84e079129003ec9ed347a1f6f59ef8ee12f0
parentcc287d4c21d979ae0fa71f885eb788424e22cbc5 (diff)
downloadphp-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.h28
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);