From a27e51fd4e9121f962821d0f7bd1960fce0a0fd5 Mon Sep 17 00:00:00 2001 From: Yasuo Ohgaki Date: Wed, 22 Jan 2014 13:40:58 +0900 Subject: Re-fixed bug #66469 --- ext/session/session.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'ext/session/session.c') diff --git a/ext/session/session.c b/ext/session/session.c index 5b03d6362e..d6d5da2d0c 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -1248,9 +1248,7 @@ static void php_session_send_cookie(TSRMLS_D) /* {{{ */ smart_str_0(&ncookie); - /* 'replace' must be 0 here, else a previous Set-Cookie - header, probably sent with setcookie() will be replaced! */ - sapi_add_header_ex(ncookie.c, ncookie.len, 0, 0 TSRMLS_CC); + sapi_add_header_ex(ncookie.c, ncookie.len, 0, 1 TSRMLS_CC); } /* }}} */ -- cgit v1.2.1 From 383423a1ee356b102563100e99e147ce8da996c3 Mon Sep 17 00:00:00 2001 From: Yasuo Ohgaki Date: Wed, 22 Jan 2014 13:46:59 +0900 Subject: Re-fixed bug #66469 --- ext/session/session.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'ext/session/session.c') diff --git a/ext/session/session.c b/ext/session/session.c index 90d6ba7447..b1fcd3a239 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -1343,9 +1343,7 @@ static void php_session_send_cookie(TSRMLS_D) /* {{{ */ smart_str_0(&ncookie); - /* 'replace' must be 0 here, else a previous Set-Cookie - header, probably sent with setcookie() will be replaced! */ - sapi_add_header_ex(ncookie.c, ncookie.len, 0, 0 TSRMLS_CC); + sapi_add_header_ex(ncookie.c, ncookie.len, 0, 1 TSRMLS_CC); } /* }}} */ -- cgit v1.2.1 From 58f94345a7ef8125d5c7a5a3dfe23a7c50a8bfcd Mon Sep 17 00:00:00 2001 From: Yasuo Ohgaki Date: Wed, 22 Jan 2014 19:21:25 +0900 Subject: Fixed previous commit may delete unwanted cookies. Sync tests from upper branches. --- ext/session/session.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) (limited to 'ext/session/session.c') diff --git a/ext/session/session.c b/ext/session/session.c index d6d5da2d0c..afc7eef56c 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -1183,6 +1183,49 @@ static int php_session_cache_limiter(TSRMLS_D) /* {{{ */ #define COOKIE_SECURE "; secure" #define COOKIE_HTTPONLY "; HttpOnly" +/* + * Remove already sent session ID cookie. + * It must be directly removed from SG(sapi_header) because sapi_add_header_ex() + * removes all of matching cookie. i.e. It deletes all of Set-Cookie headers. + */ +static void php_session_remove_cookie() { + sapi_header_struct *header; + zend_llist *l = &SG(sapi_headers).headers; + zend_llist_element *next; + zend_llist_element *current; + char *session_cookie, *e_session_name; + int session_cookie_len, len = sizeof("Set-Cookie")-1; + + e_session_name = php_url_encode(PS(session_name), strlen(PS(session_name)), NULL); + spprintf(&session_cookie, 0, "Set-Cookie: %s=", e_session_name); + efree(e_session_name); + + session_cookie_len = strlen(session_cookie); + current = l->head; + while (current) { + header = (sapi_header_struct *)(current->data); + next = current->next; + if (header->header_len > len && header->header[len] == ':' + && !strncmp(header->header, session_cookie, session_cookie_len)) { + if (current->prev) { + current->prev->next = next; + } else { + l->head = next; + } + if (next) { + next->prev = current->prev; + } else { + l->tail = current->prev; + } + sapi_free_header(header); + efree(current); + --l->count; + } + current = next; + } + efree(session_cookie); +} + static void php_session_send_cookie(TSRMLS_D) /* {{{ */ { smart_str ncookie = {0}; @@ -1248,7 +1291,8 @@ static void php_session_send_cookie(TSRMLS_D) /* {{{ */ smart_str_0(&ncookie); - sapi_add_header_ex(ncookie.c, ncookie.len, 0, 1 TSRMLS_CC); + php_session_remove_cookie(); /* remove already sent session ID cookie */ + sapi_add_header_ex(ncookie.c, ncookie.len, 0, 0 TSRMLS_CC); } /* }}} */ -- cgit v1.2.1 From 34792280bcd2210784ba574d52fc3619cc06160d Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Wed, 22 Jan 2014 12:03:54 +0100 Subject: fix zts --- ext/session/session.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ext/session/session.c') diff --git a/ext/session/session.c b/ext/session/session.c index afc7eef56c..74a7f4a1da 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -1188,7 +1188,7 @@ static int php_session_cache_limiter(TSRMLS_D) /* {{{ */ * It must be directly removed from SG(sapi_header) because sapi_add_header_ex() * removes all of matching cookie. i.e. It deletes all of Set-Cookie headers. */ -static void php_session_remove_cookie() { +static void php_session_remove_cookie(TSRMLS_D) { sapi_header_struct *header; zend_llist *l = &SG(sapi_headers).headers; zend_llist_element *next; @@ -1291,7 +1291,7 @@ static void php_session_send_cookie(TSRMLS_D) /* {{{ */ smart_str_0(&ncookie); - php_session_remove_cookie(); /* remove already sent session ID cookie */ + php_session_remove_cookie(TSRMLS_C); /* remove already sent session ID cookie */ sapi_add_header_ex(ncookie.c, ncookie.len, 0, 0 TSRMLS_CC); } /* }}} */ -- cgit v1.2.1 From 7dec5789fe67f3b5540b54c9747f9c7a10c1931d Mon Sep 17 00:00:00 2001 From: Yasuo Ohgaki Date: Thu, 13 Mar 2014 06:30:32 +0900 Subject: Revert "Implemented Request #11100 (session_gc() function)." This reverts commit 54a42f0d0cf85fe0c032009b1f601427ae1c8566. Conflicts: ext/session/tests/session_gc_basic.phpt --- ext/session/session.c | 38 -------------------------------------- 1 file changed, 38 deletions(-) (limited to 'ext/session/session.c') diff --git a/ext/session/session.c b/ext/session/session.c index 38aee7d680..d6a60fe982 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -2192,39 +2192,6 @@ static PHP_FUNCTION(session_status) } /* }}} */ -/* {{{ proto int session_gc([int maxlifetime]) - Execute garbage collection returns number of deleted data */ -static PHP_FUNCTION(session_gc) -{ - int nrdels = -1; - long maxlifetime = PS(gc_maxlifetime); - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &maxlifetime) == FAILURE) { - return; - } - - /* Session must be active to have PS(mod) */ - if (PS(session_status) != php_session_active) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Trying to garbage collect without active session"); - RETURN_FALSE; - } - - if (!PS(mod) || !PS(mod)->s_gc) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Session save handler does not have gc()"); - RETURN_FALSE; - } - PS(mod)->s_gc(&PS(mod_data), maxlifetime, &nrdels TSRMLS_CC); - - if (nrdels < 0) { - /* Files save handler return -1 if there is not a permission to remove. - Save handlder should return negative nrdels when something wrong. */ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Session gc failed. Check permission or session storage"); - RETURN_FALSE; - } - RETURN_LONG((long)nrdels); -} -/* }}} */ - /* {{{ proto void session_register_shutdown(void) Registers session_write_close() as a shutdown function */ static PHP_FUNCTION(session_register_shutdown) @@ -2320,10 +2287,6 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_session_set_cookie_params, 0, 0, 1) ZEND_ARG_INFO(0, httponly) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO(arginfo_session_gc, 0) - ZEND_ARG_INFO(0, maxlifetime) -ZEND_END_ARG_INFO() - ZEND_BEGIN_ARG_INFO(arginfo_session_class_open, 0) ZEND_ARG_INFO(0, save_path) ZEND_ARG_INFO(0, session_name) @@ -2376,7 +2339,6 @@ static const zend_function_entry session_functions[] = { PHP_FE(session_abort, arginfo_session_void) PHP_FE(session_reset, arginfo_session_void) PHP_FE(session_status, arginfo_session_void) - PHP_FE(session_gc, arginfo_session_gc) PHP_FE(session_register_shutdown, arginfo_session_void) PHP_FALIAS(session_commit, session_write_close, arginfo_session_void) PHP_FE_END -- cgit v1.2.1 From 6f0ad9ea1229a166ec2bd13f28587e49ae43b2ee Mon Sep 17 00:00:00 2001 From: Yasuo Ohgaki Date: Thu, 13 Mar 2014 06:32:49 +0900 Subject: Revert "Implement Bug #54649 Create session_serializer_name()" This reverts commit 678ec306557f61bf54b6df454387e7d9c3f50de5. Conflicts: ext/session/tests/session_serializer_name_basic.phpt --- ext/session/session.c | 30 ------------------------------ 1 file changed, 30 deletions(-) (limited to 'ext/session/session.c') diff --git a/ext/session/session.c b/ext/session/session.c index d6a60fe982..1d60c40188 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -1776,31 +1776,6 @@ static PHP_FUNCTION(session_module_name) } /* }}} */ -/* {{{ proto mixed session_serializer_name([string newname]) - Return the current serializer name used for encode/decode session data. If newname is given, the serialzer name is replaced with newname and return bool */ -static PHP_FUNCTION(session_serializer_name) -{ - char *name = NULL; - int name_len; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len) == FAILURE) { - return; - } - - /* Return serializer name */ - if (!name) { - RETURN_STRING(zend_ini_string("session.serialize_handler", sizeof("session.serialize_handler"), 0), 1); - } - - /* Set serializer name */ - if (zend_alter_ini_entry("session.serialize_handler", sizeof("session.serialize_handler"), name, name_len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME) == SUCCESS) { - RETURN_TRUE; - } else { - RETURN_FALSE; - } -} -/* }}} */ - /* {{{ proto void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc, string create_sid) Sets user-level functions */ static PHP_FUNCTION(session_set_save_handler) @@ -2238,10 +2213,6 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_session_module_name, 0, 0, 0) ZEND_ARG_INFO(0, module) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_session_serializer_name, 0, 0, 0) - ZEND_ARG_INFO(0, module) -ZEND_END_ARG_INFO() - ZEND_BEGIN_ARG_INFO_EX(arginfo_session_save_path, 0, 0, 0) ZEND_ARG_INFO(0, path) ZEND_END_ARG_INFO() @@ -2321,7 +2292,6 @@ ZEND_END_ARG_INFO() static const zend_function_entry session_functions[] = { PHP_FE(session_name, arginfo_session_name) PHP_FE(session_module_name, arginfo_session_module_name) - PHP_FE(session_serializer_name, arginfo_session_serializer_name) PHP_FE(session_save_path, arginfo_session_save_path) PHP_FE(session_id, arginfo_session_id) PHP_FE(session_regenerate_id, arginfo_session_regenerate_id) -- cgit v1.2.1