@@ -1341,45 +1341,22 @@ static int php_session_cache_limiter(void)
1341
1341
* removes all of matching cookie. i.e. It deletes all of Set-Cookie headers.
1342
1342
*/
1343
1343
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 ;
1348
1344
char * session_cookie ;
1349
- size_t session_cookie_len ;
1350
- size_t len = sizeof ("Set-Cookie" )- 1 ;
1345
+ sapi_header_line header_line = {0 };
1351
1346
1352
1347
ZEND_ASSERT (strpbrk (PS (session_name ), SESSION_FORBIDDEN_CHARS ) == NULL );
1353
1348
spprintf (& session_cookie , 0 , "Set-Cookie: %s=" , PS (session_name ));
1354
1349
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
+
1378
1354
efree (session_cookie );
1379
1355
}
1380
1356
1381
1357
static zend_result php_session_send_cookie (void )
1382
1358
{
1359
+ sapi_header_line header_line = {0 };
1383
1360
smart_str ncookie = {0 };
1384
1361
zend_string * date_fmt = NULL ;
1385
1362
zend_string * e_id ;
@@ -1445,9 +1422,9 @@ static zend_result php_session_send_cookie(void)
1445
1422
smart_str_0 (& ncookie );
1446
1423
1447
1424
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 );
1451
1428
smart_str_free (& ncookie );
1452
1429
1453
1430
return SUCCESS ;
0 commit comments