Skip to content

Commit 1999dfc

Browse files
committed
Simplify cookie setting code in ext/session
Use the modern SAPI header ops API, including the remove prefix op we just added.
1 parent 4ec7c3c commit 1999dfc

File tree

1 file changed

+9
-32
lines changed

1 file changed

+9
-32
lines changed

ext/session/session.c

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1341,45 +1341,22 @@ static int php_session_cache_limiter(void)
13411341
* removes all of matching cookie. i.e. It deletes all of Set-Cookie headers.
13421342
*/
13431343
static void php_session_remove_cookie(void) {
1344-
sapi_header_struct *header;
1345-
zend_llist *l = &SG(sapi_headers).headers;
1346-
zend_llist_element *next;
1347-
zend_llist_element *current;
13481344
char *session_cookie;
1349-
size_t session_cookie_len;
1350-
size_t len = sizeof("Set-Cookie")-1;
1345+
sapi_header_line header_line = {0};
13511346

13521347
ZEND_ASSERT(strpbrk(PS(session_name), SESSION_FORBIDDEN_CHARS) == NULL);
13531348
spprintf(&session_cookie, 0, "Set-Cookie: %s=", PS(session_name));
13541349

1355-
session_cookie_len = strlen(session_cookie);
1356-
current = l->head;
1357-
while (current) {
1358-
header = (sapi_header_struct *)(current->data);
1359-
next = current->next;
1360-
if (header->header_len > len && header->header[len] == ':'
1361-
&& !strncmp(header->header, session_cookie, session_cookie_len)) {
1362-
if (current->prev) {
1363-
current->prev->next = next;
1364-
} else {
1365-
l->head = next;
1366-
}
1367-
if (next) {
1368-
next->prev = current->prev;
1369-
} else {
1370-
l->tail = current->prev;
1371-
}
1372-
sapi_free_header(header);
1373-
efree(current);
1374-
--l->count;
1375-
}
1376-
current = next;
1377-
}
1350+
header_line.line = session_cookie;
1351+
header_line.line_len = strlen(session_cookie);
1352+
sapi_header_op(SAPI_HEADER_DELETE_PREFIX, &header_line);
1353+
13781354
efree(session_cookie);
13791355
}
13801356

13811357
static zend_result php_session_send_cookie(void)
13821358
{
1359+
sapi_header_line header_line = {0};
13831360
smart_str ncookie = {0};
13841361
zend_string *date_fmt = NULL;
13851362
zend_string *e_id;
@@ -1445,9 +1422,9 @@ static zend_result php_session_send_cookie(void)
14451422
smart_str_0(&ncookie);
14461423

14471424
php_session_remove_cookie(); /* remove already sent session ID cookie */
1448-
/* 'replace' must be 0 here, else a previous Set-Cookie
1449-
header, probably sent with setcookie() will be replaced! */
1450-
sapi_add_header_ex(estrndup(ZSTR_VAL(ncookie.s), ZSTR_LEN(ncookie.s)), ZSTR_LEN(ncookie.s), 0, 0);
1425+
header_line.line = ZSTR_VAL(ncookie.s);
1426+
header_line.line_len = ZSTR_LEN(ncookie.s);
1427+
sapi_header_op(SAPI_HEADER_ADD, &header_line);
14511428
smart_str_free(&ncookie);
14521429

14531430
return SUCCESS;

0 commit comments

Comments
 (0)