#19673 [Opn->Csd]: Only last cookie of multiple setcookies is set.
| From: | sander@php.net | Date: | Mon, 30 Sep 2002 14:43:09 +0000 |
| Subject: | #19673 [Opn->Csd]: Only last cookie of multiple setcookies is set. | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-20777@lists.php.net to get a copy of this message | ||
ID: 19673
Updated by: sander@php.net
Reported By: Tawerner@web.de
-Status: Open
+Status: Closed
Bug Type: HTTP related
Operating System: Linux 2.2.17 (Debian potato)
PHP Version: 4.2.2
New Comment:
This bug has been fixed in CVS.
In case this was a PHP problem, snapshots of the sources are packaged
every three hours; this change will be in the next snapshot. You can
grab the snapshot at http://snaps.php.net/.
In case this was a documentation problem, the fix will show up soon at
http://www.php.net/manual/.
In case this was a PHP.net website problem, the change will show
up on the PHP.net site and on the mirror sites in short time.
Thank you for the report, and for helping us make PHP better.
Previous Comments:
------------------------------------------------------------------------
[2002-09-30 08:09:18] Tawerner@web.de
When setting multiple cookies in a script, only the last cookie
remains. I tested it by:
setcookie("one", "1");
setcookie("two", "2");
setcookie("three", "3");
Then I fetched the script via telnet to see the headers, and only one
header was set:
Set-Cookie: three=3
I tracked it down to ext/standard/head.c, end of the
php_setcookie-funkction.
There, sapi_add_header gets executed. sapi_add_header is a macro to
sapi_add_header_ex with the replace-bit SET!
That means, every cookie gets overwritten by its predecessor. In fact,
only the last cookie remains.
I fixed it by exchanging the line
return sapi_add_header(cookie, strlen(cookie), 0);
with
return sapi_add_header_ex(cookie, strlin(cookie), 0, 0 TSRMLS_CC);
After compiling the patched PHP, setting multiple cookies succeedes.
Is that a bug in PHP or was it written on purpose, that only one cookie
can be set?
I could have changed the macro in main/SAPI.h, but the macro is used in
ext/zlib/zlib.c and ext/session/session.c and I didn't want to confuse
them.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=19673&edit=1